﻿unit YWSTRUTIL;

interface
uses SysUtils;

function IntToStr2(i: Integer): string; overload;
function IntToStr2(i64: Int64): string; overload;
function UIntToStr2(j: Cardinal): string; overload;
function UIntToStr2(j64: UInt64): string; overload;
procedure IntToStr2(var P : PWideChar; i : Integer); inline; overload;
procedure IntToStr2(var P : PWideChar; i64: Int64); inline; overload;
procedure UIntToStr2(var P : PWideChar; j: Cardinal); overload;
procedure UIntToStr2(var P : PWideChar; j64: UInt64); overload;
function IntToHex2(Value: Int8): string; overload;
function IntToHex2(Value: UInt8): string; inline; overload;
function IntToHex2(Value: Int16): string; overload;
function IntToHex2(Value: UInt16): string; inline; overload;
function IntToHex2(Value: Int32): string; overload;
function IntToHex2(Value: Cardinal): string; inline; overload;
function IntToHex2(Value: Int64): string; overload;
function IntToHex2(Value: UInt64): string; inline; overload;
function IntToHex2(Value: Integer; Digits: Integer): string; overload;
function IntToHex2(Value: Cardinal; Digits: Integer): string; inline; overload;
function IntToHex2(Value: Int64; Digits: Integer): string; overload;
function IntToHex2(Value: UInt64; Digits: Integer): string; inline; overload;
function IntToHex2(Value : Pointer): string; inline; overload;
procedure IntToHex2(var P : PWideChar; Value : Int8); overload;
procedure IntToHex2(var P : PWideChar; Value: UInt8); inline; overload;
procedure IntToHex2(var P : PWideChar; Value: Int16); overload;
procedure IntToHex2(var P : PWideChar; Value: UInt16); inline; overload;
procedure IntToHex2(var P : PWideChar; Value: Int32); overload;
procedure IntToHex2(var P : PWideChar; Value: Cardinal); inline; overload;
procedure IntToHex2(var P : PWideChar; Value: Int64); overload;
procedure IntToHex2(var P : PWideChar; Value: UInt64); inline; overload;
procedure IntToHex2(var P : PWideChar; Value: Integer; Digits: Integer); overload;
procedure IntToHex2(var P : PWideChar; Value: Cardinal; Digits: Integer); inline; overload;
procedure IntToHex2(var P : PWideChar; Value: Int64; Digits: Integer); overload;
procedure IntToHex2(var P : PWideChar; Value: UInt64; Digits: Integer); inline; overload;
procedure IntToHex2(var P : PWideChar; Value : Pointer); inline; overload;
procedure BinToHex2(P : Pointer; Len : NativeInt; var S : PWideChar); overload;
procedure BinToHex2(B : TBytes; var S : PWideChar; Len : NativeInt = 0); overload;
function BinToHex2(P : Pointer; Len : NativeInt):String; overload;
function BinToHex2(B : TBytes; Len : NativeInt = 0):String; overload;


implementation
const
DATA1 : packed array[-999..999] of packed array[0..3] of char
 = (
  '-999','-998','-997','-996','-995','-994','-993','-992','-991','-990'
  ,'-989','-988','-987','-986','-985','-984','-983','-982','-981','-980'
  ,'-979','-978','-977','-976','-975','-974','-973','-972','-971','-970'
  ,'-969','-968','-967','-966','-965','-964','-963','-962','-961','-960'
  ,'-959','-958','-957','-956','-955','-954','-953','-952','-951','-950'
  ,'-949','-948','-947','-946','-945','-944','-943','-942','-941','-940'
  ,'-939','-938','-937','-936','-935','-934','-933','-932','-931','-930'
  ,'-929','-928','-927','-926','-925','-924','-923','-922','-921','-920'
  ,'-919','-918','-917','-916','-915','-914','-913','-912','-911','-910'
  ,'-909','-908','-907','-906','-905','-904','-903','-902','-901','-900'
  ,'-899','-898','-897','-896','-895','-894','-893','-892','-891','-890'
  ,'-889','-888','-887','-886','-885','-884','-883','-882','-881','-880'
  ,'-879','-878','-877','-876','-875','-874','-873','-872','-871','-870'
  ,'-869','-868','-867','-866','-865','-864','-863','-862','-861','-860'
  ,'-859','-858','-857','-856','-855','-854','-853','-852','-851','-850'
  ,'-849','-848','-847','-846','-845','-844','-843','-842','-841','-840'
  ,'-839','-838','-837','-836','-835','-834','-833','-832','-831','-830'
  ,'-829','-828','-827','-826','-825','-824','-823','-822','-821','-820'
  ,'-819','-818','-817','-816','-815','-814','-813','-812','-811','-810'
  ,'-809','-808','-807','-806','-805','-804','-803','-802','-801','-800'
  ,'-799','-798','-797','-796','-795','-794','-793','-792','-791','-790'
  ,'-789','-788','-787','-786','-785','-784','-783','-782','-781','-780'
  ,'-779','-778','-777','-776','-775','-774','-773','-772','-771','-770'
  ,'-769','-768','-767','-766','-765','-764','-763','-762','-761','-760'
  ,'-759','-758','-757','-756','-755','-754','-753','-752','-751','-750'
  ,'-749','-748','-747','-746','-745','-744','-743','-742','-741','-740'
  ,'-739','-738','-737','-736','-735','-734','-733','-732','-731','-730'
  ,'-729','-728','-727','-726','-725','-724','-723','-722','-721','-720'
  ,'-719','-718','-717','-716','-715','-714','-713','-712','-711','-710'
  ,'-709','-708','-707','-706','-705','-704','-703','-702','-701','-700'
  ,'-699','-698','-697','-696','-695','-694','-693','-692','-691','-690'
  ,'-689','-688','-687','-686','-685','-684','-683','-682','-681','-680'
  ,'-679','-678','-677','-676','-675','-674','-673','-672','-671','-670'
  ,'-669','-668','-667','-666','-665','-664','-663','-662','-661','-660'
  ,'-659','-658','-657','-656','-655','-654','-653','-652','-651','-650'
  ,'-649','-648','-647','-646','-645','-644','-643','-642','-641','-640'
  ,'-639','-638','-637','-636','-635','-634','-633','-632','-631','-630'
  ,'-629','-628','-627','-626','-625','-624','-623','-622','-621','-620'
  ,'-619','-618','-617','-616','-615','-614','-613','-612','-611','-610'
  ,'-609','-608','-607','-606','-605','-604','-603','-602','-601','-600'
  ,'-599','-598','-597','-596','-595','-594','-593','-592','-591','-590'
  ,'-589','-588','-587','-586','-585','-584','-583','-582','-581','-580'
  ,'-579','-578','-577','-576','-575','-574','-573','-572','-571','-570'
  ,'-569','-568','-567','-566','-565','-564','-563','-562','-561','-560'
  ,'-559','-558','-557','-556','-555','-554','-553','-552','-551','-550'
  ,'-549','-548','-547','-546','-545','-544','-543','-542','-541','-540'
  ,'-539','-538','-537','-536','-535','-534','-533','-532','-531','-530'
  ,'-529','-528','-527','-526','-525','-524','-523','-522','-521','-520'
  ,'-519','-518','-517','-516','-515','-514','-513','-512','-511','-510'
  ,'-509','-508','-507','-506','-505','-504','-503','-502','-501','-500'
  ,'-499','-498','-497','-496','-495','-494','-493','-492','-491','-490'
  ,'-489','-488','-487','-486','-485','-484','-483','-482','-481','-480'
  ,'-479','-478','-477','-476','-475','-474','-473','-472','-471','-470'
  ,'-469','-468','-467','-466','-465','-464','-463','-462','-461','-460'
  ,'-459','-458','-457','-456','-455','-454','-453','-452','-451','-450'
  ,'-449','-448','-447','-446','-445','-444','-443','-442','-441','-440'
  ,'-439','-438','-437','-436','-435','-434','-433','-432','-431','-430'
  ,'-429','-428','-427','-426','-425','-424','-423','-422','-421','-420'
  ,'-419','-418','-417','-416','-415','-414','-413','-412','-411','-410'
  ,'-409','-408','-407','-406','-405','-404','-403','-402','-401','-400'
  ,'-399','-398','-397','-396','-395','-394','-393','-392','-391','-390'
  ,'-389','-388','-387','-386','-385','-384','-383','-382','-381','-380'
  ,'-379','-378','-377','-376','-375','-374','-373','-372','-371','-370'
  ,'-369','-368','-367','-366','-365','-364','-363','-362','-361','-360'
  ,'-359','-358','-357','-356','-355','-354','-353','-352','-351','-350'
  ,'-349','-348','-347','-346','-345','-344','-343','-342','-341','-340'
  ,'-339','-338','-337','-336','-335','-334','-333','-332','-331','-330'
  ,'-329','-328','-327','-326','-325','-324','-323','-322','-321','-320'
  ,'-319','-318','-317','-316','-315','-314','-313','-312','-311','-310'
  ,'-309','-308','-307','-306','-305','-304','-303','-302','-301','-300'
  ,'-299','-298','-297','-296','-295','-294','-293','-292','-291','-290'
  ,'-289','-288','-287','-286','-285','-284','-283','-282','-281','-280'
  ,'-279','-278','-277','-276','-275','-274','-273','-272','-271','-270'
  ,'-269','-268','-267','-266','-265','-264','-263','-262','-261','-260'
  ,'-259','-258','-257','-256','-255','-254','-253','-252','-251','-250'
  ,'-249','-248','-247','-246','-245','-244','-243','-242','-241','-240'
  ,'-239','-238','-237','-236','-235','-234','-233','-232','-231','-230'
  ,'-229','-228','-227','-226','-225','-224','-223','-222','-221','-220'
  ,'-219','-218','-217','-216','-215','-214','-213','-212','-211','-210'
  ,'-209','-208','-207','-206','-205','-204','-203','-202','-201','-200'
  ,'-199','-198','-197','-196','-195','-194','-193','-192','-191','-190'
  ,'-189','-188','-187','-186','-185','-184','-183','-182','-181','-180'
  ,'-179','-178','-177','-176','-175','-174','-173','-172','-171','-170'
  ,'-169','-168','-167','-166','-165','-164','-163','-162','-161','-160'
  ,'-159','-158','-157','-156','-155','-154','-153','-152','-151','-150'
  ,'-149','-148','-147','-146','-145','-144','-143','-142','-141','-140'
  ,'-139','-138','-137','-136','-135','-134','-133','-132','-131','-130'
  ,'-129','-128','-127','-126','-125','-124','-123','-122','-121','-120'
  ,'-119','-118','-117','-116','-115','-114','-113','-112','-111','-110'
  ,'-109','-108','-107','-106','-105','-104','-103','-102','-101','-100'
  ,'-99','-98','-97','-96','-95','-94','-93','-92','-91','-90'
  ,'-89','-88','-87','-86','-85','-84','-83','-82','-81','-80'
  ,'-79','-78','-77','-76','-75','-74','-73','-72','-71','-70'
  ,'-69','-68','-67','-66','-65','-64','-63','-62','-61','-60'
  ,'-59','-58','-57','-56','-55','-54','-53','-52','-51','-50'
  ,'-49','-48','-47','-46','-45','-44','-43','-42','-41','-40'
  ,'-39','-38','-37','-36','-35','-34','-33','-32','-31','-30'
  ,'-29','-28','-27','-26','-25','-24','-23','-22','-21','-20'
  ,'-19','-18','-17','-16','-15','-14','-13','-12','-11','-10'
  ,'-9','-8','-7','-6','-5','-4','-3','-2','-1','0'
  ,'1','2','3','4','5','6','7','8','9','10'
  ,'11','12','13','14','15','16','17','18','19','20'
  ,'21','22','23','24','25','26','27','28','29','30'
  ,'31','32','33','34','35','36','37','38','39','40'
  ,'41','42','43','44','45','46','47','48','49','50'
  ,'51','52','53','54','55','56','57','58','59','60'
  ,'61','62','63','64','65','66','67','68','69','70'
  ,'71','72','73','74','75','76','77','78','79','80'
  ,'81','82','83','84','85','86','87','88','89','90'
  ,'91','92','93','94','95','96','97','98','99','100'
  ,'101','102','103','104','105','106','107','108','109','110'
  ,'111','112','113','114','115','116','117','118','119','120'
  ,'121','122','123','124','125','126','127','128','129','130'
  ,'131','132','133','134','135','136','137','138','139','140'
  ,'141','142','143','144','145','146','147','148','149','150'
  ,'151','152','153','154','155','156','157','158','159','160'
  ,'161','162','163','164','165','166','167','168','169','170'
  ,'171','172','173','174','175','176','177','178','179','180'
  ,'181','182','183','184','185','186','187','188','189','190'
  ,'191','192','193','194','195','196','197','198','199','200'
  ,'201','202','203','204','205','206','207','208','209','210'
  ,'211','212','213','214','215','216','217','218','219','220'
  ,'221','222','223','224','225','226','227','228','229','230'
  ,'231','232','233','234','235','236','237','238','239','240'
  ,'241','242','243','244','245','246','247','248','249','250'
  ,'251','252','253','254','255','256','257','258','259','260'
  ,'261','262','263','264','265','266','267','268','269','270'
  ,'271','272','273','274','275','276','277','278','279','280'
  ,'281','282','283','284','285','286','287','288','289','290'
  ,'291','292','293','294','295','296','297','298','299','300'
  ,'301','302','303','304','305','306','307','308','309','310'
  ,'311','312','313','314','315','316','317','318','319','320'
  ,'321','322','323','324','325','326','327','328','329','330'
  ,'331','332','333','334','335','336','337','338','339','340'
  ,'341','342','343','344','345','346','347','348','349','350'
  ,'351','352','353','354','355','356','357','358','359','360'
  ,'361','362','363','364','365','366','367','368','369','370'
  ,'371','372','373','374','375','376','377','378','379','380'
  ,'381','382','383','384','385','386','387','388','389','390'
  ,'391','392','393','394','395','396','397','398','399','400'
  ,'401','402','403','404','405','406','407','408','409','410'
  ,'411','412','413','414','415','416','417','418','419','420'
  ,'421','422','423','424','425','426','427','428','429','430'
  ,'431','432','433','434','435','436','437','438','439','440'
  ,'441','442','443','444','445','446','447','448','449','450'
  ,'451','452','453','454','455','456','457','458','459','460'
  ,'461','462','463','464','465','466','467','468','469','470'
  ,'471','472','473','474','475','476','477','478','479','480'
  ,'481','482','483','484','485','486','487','488','489','490'
  ,'491','492','493','494','495','496','497','498','499','500'
  ,'501','502','503','504','505','506','507','508','509','510'
  ,'511','512','513','514','515','516','517','518','519','520'
  ,'521','522','523','524','525','526','527','528','529','530'
  ,'531','532','533','534','535','536','537','538','539','540'
  ,'541','542','543','544','545','546','547','548','549','550'
  ,'551','552','553','554','555','556','557','558','559','560'
  ,'561','562','563','564','565','566','567','568','569','570'
  ,'571','572','573','574','575','576','577','578','579','580'
  ,'581','582','583','584','585','586','587','588','589','590'
  ,'591','592','593','594','595','596','597','598','599','600'
  ,'601','602','603','604','605','606','607','608','609','610'
  ,'611','612','613','614','615','616','617','618','619','620'
  ,'621','622','623','624','625','626','627','628','629','630'
  ,'631','632','633','634','635','636','637','638','639','640'
  ,'641','642','643','644','645','646','647','648','649','650'
  ,'651','652','653','654','655','656','657','658','659','660'
  ,'661','662','663','664','665','666','667','668','669','670'
  ,'671','672','673','674','675','676','677','678','679','680'
  ,'681','682','683','684','685','686','687','688','689','690'
  ,'691','692','693','694','695','696','697','698','699','700'
  ,'701','702','703','704','705','706','707','708','709','710'
  ,'711','712','713','714','715','716','717','718','719','720'
  ,'721','722','723','724','725','726','727','728','729','730'
  ,'731','732','733','734','735','736','737','738','739','740'
  ,'741','742','743','744','745','746','747','748','749','750'
  ,'751','752','753','754','755','756','757','758','759','760'
  ,'761','762','763','764','765','766','767','768','769','770'
  ,'771','772','773','774','775','776','777','778','779','780'
  ,'781','782','783','784','785','786','787','788','789','790'
  ,'791','792','793','794','795','796','797','798','799','800'
  ,'801','802','803','804','805','806','807','808','809','810'
  ,'811','812','813','814','815','816','817','818','819','820'
  ,'821','822','823','824','825','826','827','828','829','830'
  ,'831','832','833','834','835','836','837','838','839','840'
  ,'841','842','843','844','845','846','847','848','849','850'
  ,'851','852','853','854','855','856','857','858','859','860'
  ,'861','862','863','864','865','866','867','868','869','870'
  ,'871','872','873','874','875','876','877','878','879','880'
  ,'881','882','883','884','885','886','887','888','889','890'
  ,'891','892','893','894','895','896','897','898','899','900'
  ,'901','902','903','904','905','906','907','908','909','910'
  ,'911','912','913','914','915','916','917','918','919','920'
  ,'921','922','923','924','925','926','927','928','929','930'
  ,'931','932','933','934','935','936','937','938','939','940'
  ,'941','942','943','944','945','946','947','948','949','950'
  ,'951','952','953','954','955','956','957','958','959','960'
  ,'961','962','963','964','965','966','967','968','969','970'
  ,'971','972','973','974','975','976','977','978','979','980'
  ,'981','982','983','984','985','986','987','988','989','990'
  ,'991','992','993','994','995','996','997','998','999'
)
;
DATA2 : packed array[0..9999] of packed array[0..3] of char
  = (
  '0000','0001','0002','0003','0004','0005','0006','0007','0008','0009'
  ,'0010','0011','0012','0013','0014','0015','0016','0017','0018','0019'
  ,'0020','0021','0022','0023','0024','0025','0026','0027','0028','0029'
  ,'0030','0031','0032','0033','0034','0035','0036','0037','0038','0039'
  ,'0040','0041','0042','0043','0044','0045','0046','0047','0048','0049'
  ,'0050','0051','0052','0053','0054','0055','0056','0057','0058','0059'
  ,'0060','0061','0062','0063','0064','0065','0066','0067','0068','0069'
  ,'0070','0071','0072','0073','0074','0075','0076','0077','0078','0079'
  ,'0080','0081','0082','0083','0084','0085','0086','0087','0088','0089'
  ,'0090','0091','0092','0093','0094','0095','0096','0097','0098','0099'
  ,'0100','0101','0102','0103','0104','0105','0106','0107','0108','0109'
  ,'0110','0111','0112','0113','0114','0115','0116','0117','0118','0119'
  ,'0120','0121','0122','0123','0124','0125','0126','0127','0128','0129'
  ,'0130','0131','0132','0133','0134','0135','0136','0137','0138','0139'
  ,'0140','0141','0142','0143','0144','0145','0146','0147','0148','0149'
  ,'0150','0151','0152','0153','0154','0155','0156','0157','0158','0159'
  ,'0160','0161','0162','0163','0164','0165','0166','0167','0168','0169'
  ,'0170','0171','0172','0173','0174','0175','0176','0177','0178','0179'
  ,'0180','0181','0182','0183','0184','0185','0186','0187','0188','0189'
  ,'0190','0191','0192','0193','0194','0195','0196','0197','0198','0199'
  ,'0200','0201','0202','0203','0204','0205','0206','0207','0208','0209'
  ,'0210','0211','0212','0213','0214','0215','0216','0217','0218','0219'
  ,'0220','0221','0222','0223','0224','0225','0226','0227','0228','0229'
  ,'0230','0231','0232','0233','0234','0235','0236','0237','0238','0239'
  ,'0240','0241','0242','0243','0244','0245','0246','0247','0248','0249'
  ,'0250','0251','0252','0253','0254','0255','0256','0257','0258','0259'
  ,'0260','0261','0262','0263','0264','0265','0266','0267','0268','0269'
  ,'0270','0271','0272','0273','0274','0275','0276','0277','0278','0279'
  ,'0280','0281','0282','0283','0284','0285','0286','0287','0288','0289'
  ,'0290','0291','0292','0293','0294','0295','0296','0297','0298','0299'
  ,'0300','0301','0302','0303','0304','0305','0306','0307','0308','0309'
  ,'0310','0311','0312','0313','0314','0315','0316','0317','0318','0319'
  ,'0320','0321','0322','0323','0324','0325','0326','0327','0328','0329'
  ,'0330','0331','0332','0333','0334','0335','0336','0337','0338','0339'
  ,'0340','0341','0342','0343','0344','0345','0346','0347','0348','0349'
  ,'0350','0351','0352','0353','0354','0355','0356','0357','0358','0359'
  ,'0360','0361','0362','0363','0364','0365','0366','0367','0368','0369'
  ,'0370','0371','0372','0373','0374','0375','0376','0377','0378','0379'
  ,'0380','0381','0382','0383','0384','0385','0386','0387','0388','0389'
  ,'0390','0391','0392','0393','0394','0395','0396','0397','0398','0399'
  ,'0400','0401','0402','0403','0404','0405','0406','0407','0408','0409'
  ,'0410','0411','0412','0413','0414','0415','0416','0417','0418','0419'
  ,'0420','0421','0422','0423','0424','0425','0426','0427','0428','0429'
  ,'0430','0431','0432','0433','0434','0435','0436','0437','0438','0439'
  ,'0440','0441','0442','0443','0444','0445','0446','0447','0448','0449'
  ,'0450','0451','0452','0453','0454','0455','0456','0457','0458','0459'
  ,'0460','0461','0462','0463','0464','0465','0466','0467','0468','0469'
  ,'0470','0471','0472','0473','0474','0475','0476','0477','0478','0479'
  ,'0480','0481','0482','0483','0484','0485','0486','0487','0488','0489'
  ,'0490','0491','0492','0493','0494','0495','0496','0497','0498','0499'
  ,'0500','0501','0502','0503','0504','0505','0506','0507','0508','0509'
  ,'0510','0511','0512','0513','0514','0515','0516','0517','0518','0519'
  ,'0520','0521','0522','0523','0524','0525','0526','0527','0528','0529'
  ,'0530','0531','0532','0533','0534','0535','0536','0537','0538','0539'
  ,'0540','0541','0542','0543','0544','0545','0546','0547','0548','0549'
  ,'0550','0551','0552','0553','0554','0555','0556','0557','0558','0559'
  ,'0560','0561','0562','0563','0564','0565','0566','0567','0568','0569'
  ,'0570','0571','0572','0573','0574','0575','0576','0577','0578','0579'
  ,'0580','0581','0582','0583','0584','0585','0586','0587','0588','0589'
  ,'0590','0591','0592','0593','0594','0595','0596','0597','0598','0599'
  ,'0600','0601','0602','0603','0604','0605','0606','0607','0608','0609'
  ,'0610','0611','0612','0613','0614','0615','0616','0617','0618','0619'
  ,'0620','0621','0622','0623','0624','0625','0626','0627','0628','0629'
  ,'0630','0631','0632','0633','0634','0635','0636','0637','0638','0639'
  ,'0640','0641','0642','0643','0644','0645','0646','0647','0648','0649'
  ,'0650','0651','0652','0653','0654','0655','0656','0657','0658','0659'
  ,'0660','0661','0662','0663','0664','0665','0666','0667','0668','0669'
  ,'0670','0671','0672','0673','0674','0675','0676','0677','0678','0679'
  ,'0680','0681','0682','0683','0684','0685','0686','0687','0688','0689'
  ,'0690','0691','0692','0693','0694','0695','0696','0697','0698','0699'
  ,'0700','0701','0702','0703','0704','0705','0706','0707','0708','0709'
  ,'0710','0711','0712','0713','0714','0715','0716','0717','0718','0719'
  ,'0720','0721','0722','0723','0724','0725','0726','0727','0728','0729'
  ,'0730','0731','0732','0733','0734','0735','0736','0737','0738','0739'
  ,'0740','0741','0742','0743','0744','0745','0746','0747','0748','0749'
  ,'0750','0751','0752','0753','0754','0755','0756','0757','0758','0759'
  ,'0760','0761','0762','0763','0764','0765','0766','0767','0768','0769'
  ,'0770','0771','0772','0773','0774','0775','0776','0777','0778','0779'
  ,'0780','0781','0782','0783','0784','0785','0786','0787','0788','0789'
  ,'0790','0791','0792','0793','0794','0795','0796','0797','0798','0799'
  ,'0800','0801','0802','0803','0804','0805','0806','0807','0808','0809'
  ,'0810','0811','0812','0813','0814','0815','0816','0817','0818','0819'
  ,'0820','0821','0822','0823','0824','0825','0826','0827','0828','0829'
  ,'0830','0831','0832','0833','0834','0835','0836','0837','0838','0839'
  ,'0840','0841','0842','0843','0844','0845','0846','0847','0848','0849'
  ,'0850','0851','0852','0853','0854','0855','0856','0857','0858','0859'
  ,'0860','0861','0862','0863','0864','0865','0866','0867','0868','0869'
  ,'0870','0871','0872','0873','0874','0875','0876','0877','0878','0879'
  ,'0880','0881','0882','0883','0884','0885','0886','0887','0888','0889'
  ,'0890','0891','0892','0893','0894','0895','0896','0897','0898','0899'
  ,'0900','0901','0902','0903','0904','0905','0906','0907','0908','0909'
  ,'0910','0911','0912','0913','0914','0915','0916','0917','0918','0919'
  ,'0920','0921','0922','0923','0924','0925','0926','0927','0928','0929'
  ,'0930','0931','0932','0933','0934','0935','0936','0937','0938','0939'
  ,'0940','0941','0942','0943','0944','0945','0946','0947','0948','0949'
  ,'0950','0951','0952','0953','0954','0955','0956','0957','0958','0959'
  ,'0960','0961','0962','0963','0964','0965','0966','0967','0968','0969'
  ,'0970','0971','0972','0973','0974','0975','0976','0977','0978','0979'
  ,'0980','0981','0982','0983','0984','0985','0986','0987','0988','0989'
  ,'0990','0991','0992','0993','0994','0995','0996','0997','0998','0999'
  ,'1000','1001','1002','1003','1004','1005','1006','1007','1008','1009'
  ,'1010','1011','1012','1013','1014','1015','1016','1017','1018','1019'
  ,'1020','1021','1022','1023','1024','1025','1026','1027','1028','1029'
  ,'1030','1031','1032','1033','1034','1035','1036','1037','1038','1039'
  ,'1040','1041','1042','1043','1044','1045','1046','1047','1048','1049'
  ,'1050','1051','1052','1053','1054','1055','1056','1057','1058','1059'
  ,'1060','1061','1062','1063','1064','1065','1066','1067','1068','1069'
  ,'1070','1071','1072','1073','1074','1075','1076','1077','1078','1079'
  ,'1080','1081','1082','1083','1084','1085','1086','1087','1088','1089'
  ,'1090','1091','1092','1093','1094','1095','1096','1097','1098','1099'
  ,'1100','1101','1102','1103','1104','1105','1106','1107','1108','1109'
  ,'1110','1111','1112','1113','1114','1115','1116','1117','1118','1119'
  ,'1120','1121','1122','1123','1124','1125','1126','1127','1128','1129'
  ,'1130','1131','1132','1133','1134','1135','1136','1137','1138','1139'
  ,'1140','1141','1142','1143','1144','1145','1146','1147','1148','1149'
  ,'1150','1151','1152','1153','1154','1155','1156','1157','1158','1159'
  ,'1160','1161','1162','1163','1164','1165','1166','1167','1168','1169'
  ,'1170','1171','1172','1173','1174','1175','1176','1177','1178','1179'
  ,'1180','1181','1182','1183','1184','1185','1186','1187','1188','1189'
  ,'1190','1191','1192','1193','1194','1195','1196','1197','1198','1199'
  ,'1200','1201','1202','1203','1204','1205','1206','1207','1208','1209'
  ,'1210','1211','1212','1213','1214','1215','1216','1217','1218','1219'
  ,'1220','1221','1222','1223','1224','1225','1226','1227','1228','1229'
  ,'1230','1231','1232','1233','1234','1235','1236','1237','1238','1239'
  ,'1240','1241','1242','1243','1244','1245','1246','1247','1248','1249'
  ,'1250','1251','1252','1253','1254','1255','1256','1257','1258','1259'
  ,'1260','1261','1262','1263','1264','1265','1266','1267','1268','1269'
  ,'1270','1271','1272','1273','1274','1275','1276','1277','1278','1279'
  ,'1280','1281','1282','1283','1284','1285','1286','1287','1288','1289'
  ,'1290','1291','1292','1293','1294','1295','1296','1297','1298','1299'
  ,'1300','1301','1302','1303','1304','1305','1306','1307','1308','1309'
  ,'1310','1311','1312','1313','1314','1315','1316','1317','1318','1319'
  ,'1320','1321','1322','1323','1324','1325','1326','1327','1328','1329'
  ,'1330','1331','1332','1333','1334','1335','1336','1337','1338','1339'
  ,'1340','1341','1342','1343','1344','1345','1346','1347','1348','1349'
  ,'1350','1351','1352','1353','1354','1355','1356','1357','1358','1359'
  ,'1360','1361','1362','1363','1364','1365','1366','1367','1368','1369'
  ,'1370','1371','1372','1373','1374','1375','1376','1377','1378','1379'
  ,'1380','1381','1382','1383','1384','1385','1386','1387','1388','1389'
  ,'1390','1391','1392','1393','1394','1395','1396','1397','1398','1399'
  ,'1400','1401','1402','1403','1404','1405','1406','1407','1408','1409'
  ,'1410','1411','1412','1413','1414','1415','1416','1417','1418','1419'
  ,'1420','1421','1422','1423','1424','1425','1426','1427','1428','1429'
  ,'1430','1431','1432','1433','1434','1435','1436','1437','1438','1439'
  ,'1440','1441','1442','1443','1444','1445','1446','1447','1448','1449'
  ,'1450','1451','1452','1453','1454','1455','1456','1457','1458','1459'
  ,'1460','1461','1462','1463','1464','1465','1466','1467','1468','1469'
  ,'1470','1471','1472','1473','1474','1475','1476','1477','1478','1479'
  ,'1480','1481','1482','1483','1484','1485','1486','1487','1488','1489'
  ,'1490','1491','1492','1493','1494','1495','1496','1497','1498','1499'
  ,'1500','1501','1502','1503','1504','1505','1506','1507','1508','1509'
  ,'1510','1511','1512','1513','1514','1515','1516','1517','1518','1519'
  ,'1520','1521','1522','1523','1524','1525','1526','1527','1528','1529'
  ,'1530','1531','1532','1533','1534','1535','1536','1537','1538','1539'
  ,'1540','1541','1542','1543','1544','1545','1546','1547','1548','1549'
  ,'1550','1551','1552','1553','1554','1555','1556','1557','1558','1559'
  ,'1560','1561','1562','1563','1564','1565','1566','1567','1568','1569'
  ,'1570','1571','1572','1573','1574','1575','1576','1577','1578','1579'
  ,'1580','1581','1582','1583','1584','1585','1586','1587','1588','1589'
  ,'1590','1591','1592','1593','1594','1595','1596','1597','1598','1599'
  ,'1600','1601','1602','1603','1604','1605','1606','1607','1608','1609'
  ,'1610','1611','1612','1613','1614','1615','1616','1617','1618','1619'
  ,'1620','1621','1622','1623','1624','1625','1626','1627','1628','1629'
  ,'1630','1631','1632','1633','1634','1635','1636','1637','1638','1639'
  ,'1640','1641','1642','1643','1644','1645','1646','1647','1648','1649'
  ,'1650','1651','1652','1653','1654','1655','1656','1657','1658','1659'
  ,'1660','1661','1662','1663','1664','1665','1666','1667','1668','1669'
  ,'1670','1671','1672','1673','1674','1675','1676','1677','1678','1679'
  ,'1680','1681','1682','1683','1684','1685','1686','1687','1688','1689'
  ,'1690','1691','1692','1693','1694','1695','1696','1697','1698','1699'
  ,'1700','1701','1702','1703','1704','1705','1706','1707','1708','1709'
  ,'1710','1711','1712','1713','1714','1715','1716','1717','1718','1719'
  ,'1720','1721','1722','1723','1724','1725','1726','1727','1728','1729'
  ,'1730','1731','1732','1733','1734','1735','1736','1737','1738','1739'
  ,'1740','1741','1742','1743','1744','1745','1746','1747','1748','1749'
  ,'1750','1751','1752','1753','1754','1755','1756','1757','1758','1759'
  ,'1760','1761','1762','1763','1764','1765','1766','1767','1768','1769'
  ,'1770','1771','1772','1773','1774','1775','1776','1777','1778','1779'
  ,'1780','1781','1782','1783','1784','1785','1786','1787','1788','1789'
  ,'1790','1791','1792','1793','1794','1795','1796','1797','1798','1799'
  ,'1800','1801','1802','1803','1804','1805','1806','1807','1808','1809'
  ,'1810','1811','1812','1813','1814','1815','1816','1817','1818','1819'
  ,'1820','1821','1822','1823','1824','1825','1826','1827','1828','1829'
  ,'1830','1831','1832','1833','1834','1835','1836','1837','1838','1839'
  ,'1840','1841','1842','1843','1844','1845','1846','1847','1848','1849'
  ,'1850','1851','1852','1853','1854','1855','1856','1857','1858','1859'
  ,'1860','1861','1862','1863','1864','1865','1866','1867','1868','1869'
  ,'1870','1871','1872','1873','1874','1875','1876','1877','1878','1879'
  ,'1880','1881','1882','1883','1884','1885','1886','1887','1888','1889'
  ,'1890','1891','1892','1893','1894','1895','1896','1897','1898','1899'
  ,'1900','1901','1902','1903','1904','1905','1906','1907','1908','1909'
  ,'1910','1911','1912','1913','1914','1915','1916','1917','1918','1919'
  ,'1920','1921','1922','1923','1924','1925','1926','1927','1928','1929'
  ,'1930','1931','1932','1933','1934','1935','1936','1937','1938','1939'
  ,'1940','1941','1942','1943','1944','1945','1946','1947','1948','1949'
  ,'1950','1951','1952','1953','1954','1955','1956','1957','1958','1959'
  ,'1960','1961','1962','1963','1964','1965','1966','1967','1968','1969'
  ,'1970','1971','1972','1973','1974','1975','1976','1977','1978','1979'
  ,'1980','1981','1982','1983','1984','1985','1986','1987','1988','1989'
  ,'1990','1991','1992','1993','1994','1995','1996','1997','1998','1999'
  ,'2000','2001','2002','2003','2004','2005','2006','2007','2008','2009'
  ,'2010','2011','2012','2013','2014','2015','2016','2017','2018','2019'
  ,'2020','2021','2022','2023','2024','2025','2026','2027','2028','2029'
  ,'2030','2031','2032','2033','2034','2035','2036','2037','2038','2039'
  ,'2040','2041','2042','2043','2044','2045','2046','2047','2048','2049'
  ,'2050','2051','2052','2053','2054','2055','2056','2057','2058','2059'
  ,'2060','2061','2062','2063','2064','2065','2066','2067','2068','2069'
  ,'2070','2071','2072','2073','2074','2075','2076','2077','2078','2079'
  ,'2080','2081','2082','2083','2084','2085','2086','2087','2088','2089'
  ,'2090','2091','2092','2093','2094','2095','2096','2097','2098','2099'
  ,'2100','2101','2102','2103','2104','2105','2106','2107','2108','2109'
  ,'2110','2111','2112','2113','2114','2115','2116','2117','2118','2119'
  ,'2120','2121','2122','2123','2124','2125','2126','2127','2128','2129'
  ,'2130','2131','2132','2133','2134','2135','2136','2137','2138','2139'
  ,'2140','2141','2142','2143','2144','2145','2146','2147','2148','2149'
  ,'2150','2151','2152','2153','2154','2155','2156','2157','2158','2159'
  ,'2160','2161','2162','2163','2164','2165','2166','2167','2168','2169'
  ,'2170','2171','2172','2173','2174','2175','2176','2177','2178','2179'
  ,'2180','2181','2182','2183','2184','2185','2186','2187','2188','2189'
  ,'2190','2191','2192','2193','2194','2195','2196','2197','2198','2199'
  ,'2200','2201','2202','2203','2204','2205','2206','2207','2208','2209'
  ,'2210','2211','2212','2213','2214','2215','2216','2217','2218','2219'
  ,'2220','2221','2222','2223','2224','2225','2226','2227','2228','2229'
  ,'2230','2231','2232','2233','2234','2235','2236','2237','2238','2239'
  ,'2240','2241','2242','2243','2244','2245','2246','2247','2248','2249'
  ,'2250','2251','2252','2253','2254','2255','2256','2257','2258','2259'
  ,'2260','2261','2262','2263','2264','2265','2266','2267','2268','2269'
  ,'2270','2271','2272','2273','2274','2275','2276','2277','2278','2279'
  ,'2280','2281','2282','2283','2284','2285','2286','2287','2288','2289'
  ,'2290','2291','2292','2293','2294','2295','2296','2297','2298','2299'
  ,'2300','2301','2302','2303','2304','2305','2306','2307','2308','2309'
  ,'2310','2311','2312','2313','2314','2315','2316','2317','2318','2319'
  ,'2320','2321','2322','2323','2324','2325','2326','2327','2328','2329'
  ,'2330','2331','2332','2333','2334','2335','2336','2337','2338','2339'
  ,'2340','2341','2342','2343','2344','2345','2346','2347','2348','2349'
  ,'2350','2351','2352','2353','2354','2355','2356','2357','2358','2359'
  ,'2360','2361','2362','2363','2364','2365','2366','2367','2368','2369'
  ,'2370','2371','2372','2373','2374','2375','2376','2377','2378','2379'
  ,'2380','2381','2382','2383','2384','2385','2386','2387','2388','2389'
  ,'2390','2391','2392','2393','2394','2395','2396','2397','2398','2399'
  ,'2400','2401','2402','2403','2404','2405','2406','2407','2408','2409'
  ,'2410','2411','2412','2413','2414','2415','2416','2417','2418','2419'
  ,'2420','2421','2422','2423','2424','2425','2426','2427','2428','2429'
  ,'2430','2431','2432','2433','2434','2435','2436','2437','2438','2439'
  ,'2440','2441','2442','2443','2444','2445','2446','2447','2448','2449'
  ,'2450','2451','2452','2453','2454','2455','2456','2457','2458','2459'
  ,'2460','2461','2462','2463','2464','2465','2466','2467','2468','2469'
  ,'2470','2471','2472','2473','2474','2475','2476','2477','2478','2479'
  ,'2480','2481','2482','2483','2484','2485','2486','2487','2488','2489'
  ,'2490','2491','2492','2493','2494','2495','2496','2497','2498','2499'
  ,'2500','2501','2502','2503','2504','2505','2506','2507','2508','2509'
  ,'2510','2511','2512','2513','2514','2515','2516','2517','2518','2519'
  ,'2520','2521','2522','2523','2524','2525','2526','2527','2528','2529'
  ,'2530','2531','2532','2533','2534','2535','2536','2537','2538','2539'
  ,'2540','2541','2542','2543','2544','2545','2546','2547','2548','2549'
  ,'2550','2551','2552','2553','2554','2555','2556','2557','2558','2559'
  ,'2560','2561','2562','2563','2564','2565','2566','2567','2568','2569'
  ,'2570','2571','2572','2573','2574','2575','2576','2577','2578','2579'
  ,'2580','2581','2582','2583','2584','2585','2586','2587','2588','2589'
  ,'2590','2591','2592','2593','2594','2595','2596','2597','2598','2599'
  ,'2600','2601','2602','2603','2604','2605','2606','2607','2608','2609'
  ,'2610','2611','2612','2613','2614','2615','2616','2617','2618','2619'
  ,'2620','2621','2622','2623','2624','2625','2626','2627','2628','2629'
  ,'2630','2631','2632','2633','2634','2635','2636','2637','2638','2639'
  ,'2640','2641','2642','2643','2644','2645','2646','2647','2648','2649'
  ,'2650','2651','2652','2653','2654','2655','2656','2657','2658','2659'
  ,'2660','2661','2662','2663','2664','2665','2666','2667','2668','2669'
  ,'2670','2671','2672','2673','2674','2675','2676','2677','2678','2679'
  ,'2680','2681','2682','2683','2684','2685','2686','2687','2688','2689'
  ,'2690','2691','2692','2693','2694','2695','2696','2697','2698','2699'
  ,'2700','2701','2702','2703','2704','2705','2706','2707','2708','2709'
  ,'2710','2711','2712','2713','2714','2715','2716','2717','2718','2719'
  ,'2720','2721','2722','2723','2724','2725','2726','2727','2728','2729'
  ,'2730','2731','2732','2733','2734','2735','2736','2737','2738','2739'
  ,'2740','2741','2742','2743','2744','2745','2746','2747','2748','2749'
  ,'2750','2751','2752','2753','2754','2755','2756','2757','2758','2759'
  ,'2760','2761','2762','2763','2764','2765','2766','2767','2768','2769'
  ,'2770','2771','2772','2773','2774','2775','2776','2777','2778','2779'
  ,'2780','2781','2782','2783','2784','2785','2786','2787','2788','2789'
  ,'2790','2791','2792','2793','2794','2795','2796','2797','2798','2799'
  ,'2800','2801','2802','2803','2804','2805','2806','2807','2808','2809'
  ,'2810','2811','2812','2813','2814','2815','2816','2817','2818','2819'
  ,'2820','2821','2822','2823','2824','2825','2826','2827','2828','2829'
  ,'2830','2831','2832','2833','2834','2835','2836','2837','2838','2839'
  ,'2840','2841','2842','2843','2844','2845','2846','2847','2848','2849'
  ,'2850','2851','2852','2853','2854','2855','2856','2857','2858','2859'
  ,'2860','2861','2862','2863','2864','2865','2866','2867','2868','2869'
  ,'2870','2871','2872','2873','2874','2875','2876','2877','2878','2879'
  ,'2880','2881','2882','2883','2884','2885','2886','2887','2888','2889'
  ,'2890','2891','2892','2893','2894','2895','2896','2897','2898','2899'
  ,'2900','2901','2902','2903','2904','2905','2906','2907','2908','2909'
  ,'2910','2911','2912','2913','2914','2915','2916','2917','2918','2919'
  ,'2920','2921','2922','2923','2924','2925','2926','2927','2928','2929'
  ,'2930','2931','2932','2933','2934','2935','2936','2937','2938','2939'
  ,'2940','2941','2942','2943','2944','2945','2946','2947','2948','2949'
  ,'2950','2951','2952','2953','2954','2955','2956','2957','2958','2959'
  ,'2960','2961','2962','2963','2964','2965','2966','2967','2968','2969'
  ,'2970','2971','2972','2973','2974','2975','2976','2977','2978','2979'
  ,'2980','2981','2982','2983','2984','2985','2986','2987','2988','2989'
  ,'2990','2991','2992','2993','2994','2995','2996','2997','2998','2999'
  ,'3000','3001','3002','3003','3004','3005','3006','3007','3008','3009'
  ,'3010','3011','3012','3013','3014','3015','3016','3017','3018','3019'
  ,'3020','3021','3022','3023','3024','3025','3026','3027','3028','3029'
  ,'3030','3031','3032','3033','3034','3035','3036','3037','3038','3039'
  ,'3040','3041','3042','3043','3044','3045','3046','3047','3048','3049'
  ,'3050','3051','3052','3053','3054','3055','3056','3057','3058','3059'
  ,'3060','3061','3062','3063','3064','3065','3066','3067','3068','3069'
  ,'3070','3071','3072','3073','3074','3075','3076','3077','3078','3079'
  ,'3080','3081','3082','3083','3084','3085','3086','3087','3088','3089'
  ,'3090','3091','3092','3093','3094','3095','3096','3097','3098','3099'
  ,'3100','3101','3102','3103','3104','3105','3106','3107','3108','3109'
  ,'3110','3111','3112','3113','3114','3115','3116','3117','3118','3119'
  ,'3120','3121','3122','3123','3124','3125','3126','3127','3128','3129'
  ,'3130','3131','3132','3133','3134','3135','3136','3137','3138','3139'
  ,'3140','3141','3142','3143','3144','3145','3146','3147','3148','3149'
  ,'3150','3151','3152','3153','3154','3155','3156','3157','3158','3159'
  ,'3160','3161','3162','3163','3164','3165','3166','3167','3168','3169'
  ,'3170','3171','3172','3173','3174','3175','3176','3177','3178','3179'
  ,'3180','3181','3182','3183','3184','3185','3186','3187','3188','3189'
  ,'3190','3191','3192','3193','3194','3195','3196','3197','3198','3199'
  ,'3200','3201','3202','3203','3204','3205','3206','3207','3208','3209'
  ,'3210','3211','3212','3213','3214','3215','3216','3217','3218','3219'
  ,'3220','3221','3222','3223','3224','3225','3226','3227','3228','3229'
  ,'3230','3231','3232','3233','3234','3235','3236','3237','3238','3239'
  ,'3240','3241','3242','3243','3244','3245','3246','3247','3248','3249'
  ,'3250','3251','3252','3253','3254','3255','3256','3257','3258','3259'
  ,'3260','3261','3262','3263','3264','3265','3266','3267','3268','3269'
  ,'3270','3271','3272','3273','3274','3275','3276','3277','3278','3279'
  ,'3280','3281','3282','3283','3284','3285','3286','3287','3288','3289'
  ,'3290','3291','3292','3293','3294','3295','3296','3297','3298','3299'
  ,'3300','3301','3302','3303','3304','3305','3306','3307','3308','3309'
  ,'3310','3311','3312','3313','3314','3315','3316','3317','3318','3319'
  ,'3320','3321','3322','3323','3324','3325','3326','3327','3328','3329'
  ,'3330','3331','3332','3333','3334','3335','3336','3337','3338','3339'
  ,'3340','3341','3342','3343','3344','3345','3346','3347','3348','3349'
  ,'3350','3351','3352','3353','3354','3355','3356','3357','3358','3359'
  ,'3360','3361','3362','3363','3364','3365','3366','3367','3368','3369'
  ,'3370','3371','3372','3373','3374','3375','3376','3377','3378','3379'
  ,'3380','3381','3382','3383','3384','3385','3386','3387','3388','3389'
  ,'3390','3391','3392','3393','3394','3395','3396','3397','3398','3399'
  ,'3400','3401','3402','3403','3404','3405','3406','3407','3408','3409'
  ,'3410','3411','3412','3413','3414','3415','3416','3417','3418','3419'
  ,'3420','3421','3422','3423','3424','3425','3426','3427','3428','3429'
  ,'3430','3431','3432','3433','3434','3435','3436','3437','3438','3439'
  ,'3440','3441','3442','3443','3444','3445','3446','3447','3448','3449'
  ,'3450','3451','3452','3453','3454','3455','3456','3457','3458','3459'
  ,'3460','3461','3462','3463','3464','3465','3466','3467','3468','3469'
  ,'3470','3471','3472','3473','3474','3475','3476','3477','3478','3479'
  ,'3480','3481','3482','3483','3484','3485','3486','3487','3488','3489'
  ,'3490','3491','3492','3493','3494','3495','3496','3497','3498','3499'
  ,'3500','3501','3502','3503','3504','3505','3506','3507','3508','3509'
  ,'3510','3511','3512','3513','3514','3515','3516','3517','3518','3519'
  ,'3520','3521','3522','3523','3524','3525','3526','3527','3528','3529'
  ,'3530','3531','3532','3533','3534','3535','3536','3537','3538','3539'
  ,'3540','3541','3542','3543','3544','3545','3546','3547','3548','3549'
  ,'3550','3551','3552','3553','3554','3555','3556','3557','3558','3559'
  ,'3560','3561','3562','3563','3564','3565','3566','3567','3568','3569'
  ,'3570','3571','3572','3573','3574','3575','3576','3577','3578','3579'
  ,'3580','3581','3582','3583','3584','3585','3586','3587','3588','3589'
  ,'3590','3591','3592','3593','3594','3595','3596','3597','3598','3599'
  ,'3600','3601','3602','3603','3604','3605','3606','3607','3608','3609'
  ,'3610','3611','3612','3613','3614','3615','3616','3617','3618','3619'
  ,'3620','3621','3622','3623','3624','3625','3626','3627','3628','3629'
  ,'3630','3631','3632','3633','3634','3635','3636','3637','3638','3639'
  ,'3640','3641','3642','3643','3644','3645','3646','3647','3648','3649'
  ,'3650','3651','3652','3653','3654','3655','3656','3657','3658','3659'
  ,'3660','3661','3662','3663','3664','3665','3666','3667','3668','3669'
  ,'3670','3671','3672','3673','3674','3675','3676','3677','3678','3679'
  ,'3680','3681','3682','3683','3684','3685','3686','3687','3688','3689'
  ,'3690','3691','3692','3693','3694','3695','3696','3697','3698','3699'
  ,'3700','3701','3702','3703','3704','3705','3706','3707','3708','3709'
  ,'3710','3711','3712','3713','3714','3715','3716','3717','3718','3719'
  ,'3720','3721','3722','3723','3724','3725','3726','3727','3728','3729'
  ,'3730','3731','3732','3733','3734','3735','3736','3737','3738','3739'
  ,'3740','3741','3742','3743','3744','3745','3746','3747','3748','3749'
  ,'3750','3751','3752','3753','3754','3755','3756','3757','3758','3759'
  ,'3760','3761','3762','3763','3764','3765','3766','3767','3768','3769'
  ,'3770','3771','3772','3773','3774','3775','3776','3777','3778','3779'
  ,'3780','3781','3782','3783','3784','3785','3786','3787','3788','3789'
  ,'3790','3791','3792','3793','3794','3795','3796','3797','3798','3799'
  ,'3800','3801','3802','3803','3804','3805','3806','3807','3808','3809'
  ,'3810','3811','3812','3813','3814','3815','3816','3817','3818','3819'
  ,'3820','3821','3822','3823','3824','3825','3826','3827','3828','3829'
  ,'3830','3831','3832','3833','3834','3835','3836','3837','3838','3839'
  ,'3840','3841','3842','3843','3844','3845','3846','3847','3848','3849'
  ,'3850','3851','3852','3853','3854','3855','3856','3857','3858','3859'
  ,'3860','3861','3862','3863','3864','3865','3866','3867','3868','3869'
  ,'3870','3871','3872','3873','3874','3875','3876','3877','3878','3879'
  ,'3880','3881','3882','3883','3884','3885','3886','3887','3888','3889'
  ,'3890','3891','3892','3893','3894','3895','3896','3897','3898','3899'
  ,'3900','3901','3902','3903','3904','3905','3906','3907','3908','3909'
  ,'3910','3911','3912','3913','3914','3915','3916','3917','3918','3919'
  ,'3920','3921','3922','3923','3924','3925','3926','3927','3928','3929'
  ,'3930','3931','3932','3933','3934','3935','3936','3937','3938','3939'
  ,'3940','3941','3942','3943','3944','3945','3946','3947','3948','3949'
  ,'3950','3951','3952','3953','3954','3955','3956','3957','3958','3959'
  ,'3960','3961','3962','3963','3964','3965','3966','3967','3968','3969'
  ,'3970','3971','3972','3973','3974','3975','3976','3977','3978','3979'
  ,'3980','3981','3982','3983','3984','3985','3986','3987','3988','3989'
  ,'3990','3991','3992','3993','3994','3995','3996','3997','3998','3999'
  ,'4000','4001','4002','4003','4004','4005','4006','4007','4008','4009'
  ,'4010','4011','4012','4013','4014','4015','4016','4017','4018','4019'
  ,'4020','4021','4022','4023','4024','4025','4026','4027','4028','4029'
  ,'4030','4031','4032','4033','4034','4035','4036','4037','4038','4039'
  ,'4040','4041','4042','4043','4044','4045','4046','4047','4048','4049'
  ,'4050','4051','4052','4053','4054','4055','4056','4057','4058','4059'
  ,'4060','4061','4062','4063','4064','4065','4066','4067','4068','4069'
  ,'4070','4071','4072','4073','4074','4075','4076','4077','4078','4079'
  ,'4080','4081','4082','4083','4084','4085','4086','4087','4088','4089'
  ,'4090','4091','4092','4093','4094','4095','4096','4097','4098','4099'
  ,'4100','4101','4102','4103','4104','4105','4106','4107','4108','4109'
  ,'4110','4111','4112','4113','4114','4115','4116','4117','4118','4119'
  ,'4120','4121','4122','4123','4124','4125','4126','4127','4128','4129'
  ,'4130','4131','4132','4133','4134','4135','4136','4137','4138','4139'
  ,'4140','4141','4142','4143','4144','4145','4146','4147','4148','4149'
  ,'4150','4151','4152','4153','4154','4155','4156','4157','4158','4159'
  ,'4160','4161','4162','4163','4164','4165','4166','4167','4168','4169'
  ,'4170','4171','4172','4173','4174','4175','4176','4177','4178','4179'
  ,'4180','4181','4182','4183','4184','4185','4186','4187','4188','4189'
  ,'4190','4191','4192','4193','4194','4195','4196','4197','4198','4199'
  ,'4200','4201','4202','4203','4204','4205','4206','4207','4208','4209'
  ,'4210','4211','4212','4213','4214','4215','4216','4217','4218','4219'
  ,'4220','4221','4222','4223','4224','4225','4226','4227','4228','4229'
  ,'4230','4231','4232','4233','4234','4235','4236','4237','4238','4239'
  ,'4240','4241','4242','4243','4244','4245','4246','4247','4248','4249'
  ,'4250','4251','4252','4253','4254','4255','4256','4257','4258','4259'
  ,'4260','4261','4262','4263','4264','4265','4266','4267','4268','4269'
  ,'4270','4271','4272','4273','4274','4275','4276','4277','4278','4279'
  ,'4280','4281','4282','4283','4284','4285','4286','4287','4288','4289'
  ,'4290','4291','4292','4293','4294','4295','4296','4297','4298','4299'
  ,'4300','4301','4302','4303','4304','4305','4306','4307','4308','4309'
  ,'4310','4311','4312','4313','4314','4315','4316','4317','4318','4319'
  ,'4320','4321','4322','4323','4324','4325','4326','4327','4328','4329'
  ,'4330','4331','4332','4333','4334','4335','4336','4337','4338','4339'
  ,'4340','4341','4342','4343','4344','4345','4346','4347','4348','4349'
  ,'4350','4351','4352','4353','4354','4355','4356','4357','4358','4359'
  ,'4360','4361','4362','4363','4364','4365','4366','4367','4368','4369'
  ,'4370','4371','4372','4373','4374','4375','4376','4377','4378','4379'
  ,'4380','4381','4382','4383','4384','4385','4386','4387','4388','4389'
  ,'4390','4391','4392','4393','4394','4395','4396','4397','4398','4399'
  ,'4400','4401','4402','4403','4404','4405','4406','4407','4408','4409'
  ,'4410','4411','4412','4413','4414','4415','4416','4417','4418','4419'
  ,'4420','4421','4422','4423','4424','4425','4426','4427','4428','4429'
  ,'4430','4431','4432','4433','4434','4435','4436','4437','4438','4439'
  ,'4440','4441','4442','4443','4444','4445','4446','4447','4448','4449'
  ,'4450','4451','4452','4453','4454','4455','4456','4457','4458','4459'
  ,'4460','4461','4462','4463','4464','4465','4466','4467','4468','4469'
  ,'4470','4471','4472','4473','4474','4475','4476','4477','4478','4479'
  ,'4480','4481','4482','4483','4484','4485','4486','4487','4488','4489'
  ,'4490','4491','4492','4493','4494','4495','4496','4497','4498','4499'
  ,'4500','4501','4502','4503','4504','4505','4506','4507','4508','4509'
  ,'4510','4511','4512','4513','4514','4515','4516','4517','4518','4519'
  ,'4520','4521','4522','4523','4524','4525','4526','4527','4528','4529'
  ,'4530','4531','4532','4533','4534','4535','4536','4537','4538','4539'
  ,'4540','4541','4542','4543','4544','4545','4546','4547','4548','4549'
  ,'4550','4551','4552','4553','4554','4555','4556','4557','4558','4559'
  ,'4560','4561','4562','4563','4564','4565','4566','4567','4568','4569'
  ,'4570','4571','4572','4573','4574','4575','4576','4577','4578','4579'
  ,'4580','4581','4582','4583','4584','4585','4586','4587','4588','4589'
  ,'4590','4591','4592','4593','4594','4595','4596','4597','4598','4599'
  ,'4600','4601','4602','4603','4604','4605','4606','4607','4608','4609'
  ,'4610','4611','4612','4613','4614','4615','4616','4617','4618','4619'
  ,'4620','4621','4622','4623','4624','4625','4626','4627','4628','4629'
  ,'4630','4631','4632','4633','4634','4635','4636','4637','4638','4639'
  ,'4640','4641','4642','4643','4644','4645','4646','4647','4648','4649'
  ,'4650','4651','4652','4653','4654','4655','4656','4657','4658','4659'
  ,'4660','4661','4662','4663','4664','4665','4666','4667','4668','4669'
  ,'4670','4671','4672','4673','4674','4675','4676','4677','4678','4679'
  ,'4680','4681','4682','4683','4684','4685','4686','4687','4688','4689'
  ,'4690','4691','4692','4693','4694','4695','4696','4697','4698','4699'
  ,'4700','4701','4702','4703','4704','4705','4706','4707','4708','4709'
  ,'4710','4711','4712','4713','4714','4715','4716','4717','4718','4719'
  ,'4720','4721','4722','4723','4724','4725','4726','4727','4728','4729'
  ,'4730','4731','4732','4733','4734','4735','4736','4737','4738','4739'
  ,'4740','4741','4742','4743','4744','4745','4746','4747','4748','4749'
  ,'4750','4751','4752','4753','4754','4755','4756','4757','4758','4759'
  ,'4760','4761','4762','4763','4764','4765','4766','4767','4768','4769'
  ,'4770','4771','4772','4773','4774','4775','4776','4777','4778','4779'
  ,'4780','4781','4782','4783','4784','4785','4786','4787','4788','4789'
  ,'4790','4791','4792','4793','4794','4795','4796','4797','4798','4799'
  ,'4800','4801','4802','4803','4804','4805','4806','4807','4808','4809'
  ,'4810','4811','4812','4813','4814','4815','4816','4817','4818','4819'
  ,'4820','4821','4822','4823','4824','4825','4826','4827','4828','4829'
  ,'4830','4831','4832','4833','4834','4835','4836','4837','4838','4839'
  ,'4840','4841','4842','4843','4844','4845','4846','4847','4848','4849'
  ,'4850','4851','4852','4853','4854','4855','4856','4857','4858','4859'
  ,'4860','4861','4862','4863','4864','4865','4866','4867','4868','4869'
  ,'4870','4871','4872','4873','4874','4875','4876','4877','4878','4879'
  ,'4880','4881','4882','4883','4884','4885','4886','4887','4888','4889'
  ,'4890','4891','4892','4893','4894','4895','4896','4897','4898','4899'
  ,'4900','4901','4902','4903','4904','4905','4906','4907','4908','4909'
  ,'4910','4911','4912','4913','4914','4915','4916','4917','4918','4919'
  ,'4920','4921','4922','4923','4924','4925','4926','4927','4928','4929'
  ,'4930','4931','4932','4933','4934','4935','4936','4937','4938','4939'
  ,'4940','4941','4942','4943','4944','4945','4946','4947','4948','4949'
  ,'4950','4951','4952','4953','4954','4955','4956','4957','4958','4959'
  ,'4960','4961','4962','4963','4964','4965','4966','4967','4968','4969'
  ,'4970','4971','4972','4973','4974','4975','4976','4977','4978','4979'
  ,'4980','4981','4982','4983','4984','4985','4986','4987','4988','4989'
  ,'4990','4991','4992','4993','4994','4995','4996','4997','4998','4999'
  ,'5000','5001','5002','5003','5004','5005','5006','5007','5008','5009'
  ,'5010','5011','5012','5013','5014','5015','5016','5017','5018','5019'
  ,'5020','5021','5022','5023','5024','5025','5026','5027','5028','5029'
  ,'5030','5031','5032','5033','5034','5035','5036','5037','5038','5039'
  ,'5040','5041','5042','5043','5044','5045','5046','5047','5048','5049'
  ,'5050','5051','5052','5053','5054','5055','5056','5057','5058','5059'
  ,'5060','5061','5062','5063','5064','5065','5066','5067','5068','5069'
  ,'5070','5071','5072','5073','5074','5075','5076','5077','5078','5079'
  ,'5080','5081','5082','5083','5084','5085','5086','5087','5088','5089'
  ,'5090','5091','5092','5093','5094','5095','5096','5097','5098','5099'
  ,'5100','5101','5102','5103','5104','5105','5106','5107','5108','5109'
  ,'5110','5111','5112','5113','5114','5115','5116','5117','5118','5119'
  ,'5120','5121','5122','5123','5124','5125','5126','5127','5128','5129'
  ,'5130','5131','5132','5133','5134','5135','5136','5137','5138','5139'
  ,'5140','5141','5142','5143','5144','5145','5146','5147','5148','5149'
  ,'5150','5151','5152','5153','5154','5155','5156','5157','5158','5159'
  ,'5160','5161','5162','5163','5164','5165','5166','5167','5168','5169'
  ,'5170','5171','5172','5173','5174','5175','5176','5177','5178','5179'
  ,'5180','5181','5182','5183','5184','5185','5186','5187','5188','5189'
  ,'5190','5191','5192','5193','5194','5195','5196','5197','5198','5199'
  ,'5200','5201','5202','5203','5204','5205','5206','5207','5208','5209'
  ,'5210','5211','5212','5213','5214','5215','5216','5217','5218','5219'
  ,'5220','5221','5222','5223','5224','5225','5226','5227','5228','5229'
  ,'5230','5231','5232','5233','5234','5235','5236','5237','5238','5239'
  ,'5240','5241','5242','5243','5244','5245','5246','5247','5248','5249'
  ,'5250','5251','5252','5253','5254','5255','5256','5257','5258','5259'
  ,'5260','5261','5262','5263','5264','5265','5266','5267','5268','5269'
  ,'5270','5271','5272','5273','5274','5275','5276','5277','5278','5279'
  ,'5280','5281','5282','5283','5284','5285','5286','5287','5288','5289'
  ,'5290','5291','5292','5293','5294','5295','5296','5297','5298','5299'
  ,'5300','5301','5302','5303','5304','5305','5306','5307','5308','5309'
  ,'5310','5311','5312','5313','5314','5315','5316','5317','5318','5319'
  ,'5320','5321','5322','5323','5324','5325','5326','5327','5328','5329'
  ,'5330','5331','5332','5333','5334','5335','5336','5337','5338','5339'
  ,'5340','5341','5342','5343','5344','5345','5346','5347','5348','5349'
  ,'5350','5351','5352','5353','5354','5355','5356','5357','5358','5359'
  ,'5360','5361','5362','5363','5364','5365','5366','5367','5368','5369'
  ,'5370','5371','5372','5373','5374','5375','5376','5377','5378','5379'
  ,'5380','5381','5382','5383','5384','5385','5386','5387','5388','5389'
  ,'5390','5391','5392','5393','5394','5395','5396','5397','5398','5399'
  ,'5400','5401','5402','5403','5404','5405','5406','5407','5408','5409'
  ,'5410','5411','5412','5413','5414','5415','5416','5417','5418','5419'
  ,'5420','5421','5422','5423','5424','5425','5426','5427','5428','5429'
  ,'5430','5431','5432','5433','5434','5435','5436','5437','5438','5439'
  ,'5440','5441','5442','5443','5444','5445','5446','5447','5448','5449'
  ,'5450','5451','5452','5453','5454','5455','5456','5457','5458','5459'
  ,'5460','5461','5462','5463','5464','5465','5466','5467','5468','5469'
  ,'5470','5471','5472','5473','5474','5475','5476','5477','5478','5479'
  ,'5480','5481','5482','5483','5484','5485','5486','5487','5488','5489'
  ,'5490','5491','5492','5493','5494','5495','5496','5497','5498','5499'
  ,'5500','5501','5502','5503','5504','5505','5506','5507','5508','5509'
  ,'5510','5511','5512','5513','5514','5515','5516','5517','5518','5519'
  ,'5520','5521','5522','5523','5524','5525','5526','5527','5528','5529'
  ,'5530','5531','5532','5533','5534','5535','5536','5537','5538','5539'
  ,'5540','5541','5542','5543','5544','5545','5546','5547','5548','5549'
  ,'5550','5551','5552','5553','5554','5555','5556','5557','5558','5559'
  ,'5560','5561','5562','5563','5564','5565','5566','5567','5568','5569'
  ,'5570','5571','5572','5573','5574','5575','5576','5577','5578','5579'
  ,'5580','5581','5582','5583','5584','5585','5586','5587','5588','5589'
  ,'5590','5591','5592','5593','5594','5595','5596','5597','5598','5599'
  ,'5600','5601','5602','5603','5604','5605','5606','5607','5608','5609'
  ,'5610','5611','5612','5613','5614','5615','5616','5617','5618','5619'
  ,'5620','5621','5622','5623','5624','5625','5626','5627','5628','5629'
  ,'5630','5631','5632','5633','5634','5635','5636','5637','5638','5639'
  ,'5640','5641','5642','5643','5644','5645','5646','5647','5648','5649'
  ,'5650','5651','5652','5653','5654','5655','5656','5657','5658','5659'
  ,'5660','5661','5662','5663','5664','5665','5666','5667','5668','5669'
  ,'5670','5671','5672','5673','5674','5675','5676','5677','5678','5679'
  ,'5680','5681','5682','5683','5684','5685','5686','5687','5688','5689'
  ,'5690','5691','5692','5693','5694','5695','5696','5697','5698','5699'
  ,'5700','5701','5702','5703','5704','5705','5706','5707','5708','5709'
  ,'5710','5711','5712','5713','5714','5715','5716','5717','5718','5719'
  ,'5720','5721','5722','5723','5724','5725','5726','5727','5728','5729'
  ,'5730','5731','5732','5733','5734','5735','5736','5737','5738','5739'
  ,'5740','5741','5742','5743','5744','5745','5746','5747','5748','5749'
  ,'5750','5751','5752','5753','5754','5755','5756','5757','5758','5759'
  ,'5760','5761','5762','5763','5764','5765','5766','5767','5768','5769'
  ,'5770','5771','5772','5773','5774','5775','5776','5777','5778','5779'
  ,'5780','5781','5782','5783','5784','5785','5786','5787','5788','5789'
  ,'5790','5791','5792','5793','5794','5795','5796','5797','5798','5799'
  ,'5800','5801','5802','5803','5804','5805','5806','5807','5808','5809'
  ,'5810','5811','5812','5813','5814','5815','5816','5817','5818','5819'
  ,'5820','5821','5822','5823','5824','5825','5826','5827','5828','5829'
  ,'5830','5831','5832','5833','5834','5835','5836','5837','5838','5839'
  ,'5840','5841','5842','5843','5844','5845','5846','5847','5848','5849'
  ,'5850','5851','5852','5853','5854','5855','5856','5857','5858','5859'
  ,'5860','5861','5862','5863','5864','5865','5866','5867','5868','5869'
  ,'5870','5871','5872','5873','5874','5875','5876','5877','5878','5879'
  ,'5880','5881','5882','5883','5884','5885','5886','5887','5888','5889'
  ,'5890','5891','5892','5893','5894','5895','5896','5897','5898','5899'
  ,'5900','5901','5902','5903','5904','5905','5906','5907','5908','5909'
  ,'5910','5911','5912','5913','5914','5915','5916','5917','5918','5919'
  ,'5920','5921','5922','5923','5924','5925','5926','5927','5928','5929'
  ,'5930','5931','5932','5933','5934','5935','5936','5937','5938','5939'
  ,'5940','5941','5942','5943','5944','5945','5946','5947','5948','5949'
  ,'5950','5951','5952','5953','5954','5955','5956','5957','5958','5959'
  ,'5960','5961','5962','5963','5964','5965','5966','5967','5968','5969'
  ,'5970','5971','5972','5973','5974','5975','5976','5977','5978','5979'
  ,'5980','5981','5982','5983','5984','5985','5986','5987','5988','5989'
  ,'5990','5991','5992','5993','5994','5995','5996','5997','5998','5999'
  ,'6000','6001','6002','6003','6004','6005','6006','6007','6008','6009'
  ,'6010','6011','6012','6013','6014','6015','6016','6017','6018','6019'
  ,'6020','6021','6022','6023','6024','6025','6026','6027','6028','6029'
  ,'6030','6031','6032','6033','6034','6035','6036','6037','6038','6039'
  ,'6040','6041','6042','6043','6044','6045','6046','6047','6048','6049'
  ,'6050','6051','6052','6053','6054','6055','6056','6057','6058','6059'
  ,'6060','6061','6062','6063','6064','6065','6066','6067','6068','6069'
  ,'6070','6071','6072','6073','6074','6075','6076','6077','6078','6079'
  ,'6080','6081','6082','6083','6084','6085','6086','6087','6088','6089'
  ,'6090','6091','6092','6093','6094','6095','6096','6097','6098','6099'
  ,'6100','6101','6102','6103','6104','6105','6106','6107','6108','6109'
  ,'6110','6111','6112','6113','6114','6115','6116','6117','6118','6119'
  ,'6120','6121','6122','6123','6124','6125','6126','6127','6128','6129'
  ,'6130','6131','6132','6133','6134','6135','6136','6137','6138','6139'
  ,'6140','6141','6142','6143','6144','6145','6146','6147','6148','6149'
  ,'6150','6151','6152','6153','6154','6155','6156','6157','6158','6159'
  ,'6160','6161','6162','6163','6164','6165','6166','6167','6168','6169'
  ,'6170','6171','6172','6173','6174','6175','6176','6177','6178','6179'
  ,'6180','6181','6182','6183','6184','6185','6186','6187','6188','6189'
  ,'6190','6191','6192','6193','6194','6195','6196','6197','6198','6199'
  ,'6200','6201','6202','6203','6204','6205','6206','6207','6208','6209'
  ,'6210','6211','6212','6213','6214','6215','6216','6217','6218','6219'
  ,'6220','6221','6222','6223','6224','6225','6226','6227','6228','6229'
  ,'6230','6231','6232','6233','6234','6235','6236','6237','6238','6239'
  ,'6240','6241','6242','6243','6244','6245','6246','6247','6248','6249'
  ,'6250','6251','6252','6253','6254','6255','6256','6257','6258','6259'
  ,'6260','6261','6262','6263','6264','6265','6266','6267','6268','6269'
  ,'6270','6271','6272','6273','6274','6275','6276','6277','6278','6279'
  ,'6280','6281','6282','6283','6284','6285','6286','6287','6288','6289'
  ,'6290','6291','6292','6293','6294','6295','6296','6297','6298','6299'
  ,'6300','6301','6302','6303','6304','6305','6306','6307','6308','6309'
  ,'6310','6311','6312','6313','6314','6315','6316','6317','6318','6319'
  ,'6320','6321','6322','6323','6324','6325','6326','6327','6328','6329'
  ,'6330','6331','6332','6333','6334','6335','6336','6337','6338','6339'
  ,'6340','6341','6342','6343','6344','6345','6346','6347','6348','6349'
  ,'6350','6351','6352','6353','6354','6355','6356','6357','6358','6359'
  ,'6360','6361','6362','6363','6364','6365','6366','6367','6368','6369'
  ,'6370','6371','6372','6373','6374','6375','6376','6377','6378','6379'
  ,'6380','6381','6382','6383','6384','6385','6386','6387','6388','6389'
  ,'6390','6391','6392','6393','6394','6395','6396','6397','6398','6399'
  ,'6400','6401','6402','6403','6404','6405','6406','6407','6408','6409'
  ,'6410','6411','6412','6413','6414','6415','6416','6417','6418','6419'
  ,'6420','6421','6422','6423','6424','6425','6426','6427','6428','6429'
  ,'6430','6431','6432','6433','6434','6435','6436','6437','6438','6439'
  ,'6440','6441','6442','6443','6444','6445','6446','6447','6448','6449'
  ,'6450','6451','6452','6453','6454','6455','6456','6457','6458','6459'
  ,'6460','6461','6462','6463','6464','6465','6466','6467','6468','6469'
  ,'6470','6471','6472','6473','6474','6475','6476','6477','6478','6479'
  ,'6480','6481','6482','6483','6484','6485','6486','6487','6488','6489'
  ,'6490','6491','6492','6493','6494','6495','6496','6497','6498','6499'
  ,'6500','6501','6502','6503','6504','6505','6506','6507','6508','6509'
  ,'6510','6511','6512','6513','6514','6515','6516','6517','6518','6519'
  ,'6520','6521','6522','6523','6524','6525','6526','6527','6528','6529'
  ,'6530','6531','6532','6533','6534','6535','6536','6537','6538','6539'
  ,'6540','6541','6542','6543','6544','6545','6546','6547','6548','6549'
  ,'6550','6551','6552','6553','6554','6555','6556','6557','6558','6559'
  ,'6560','6561','6562','6563','6564','6565','6566','6567','6568','6569'
  ,'6570','6571','6572','6573','6574','6575','6576','6577','6578','6579'
  ,'6580','6581','6582','6583','6584','6585','6586','6587','6588','6589'
  ,'6590','6591','6592','6593','6594','6595','6596','6597','6598','6599'
  ,'6600','6601','6602','6603','6604','6605','6606','6607','6608','6609'
  ,'6610','6611','6612','6613','6614','6615','6616','6617','6618','6619'
  ,'6620','6621','6622','6623','6624','6625','6626','6627','6628','6629'
  ,'6630','6631','6632','6633','6634','6635','6636','6637','6638','6639'
  ,'6640','6641','6642','6643','6644','6645','6646','6647','6648','6649'
  ,'6650','6651','6652','6653','6654','6655','6656','6657','6658','6659'
  ,'6660','6661','6662','6663','6664','6665','6666','6667','6668','6669'
  ,'6670','6671','6672','6673','6674','6675','6676','6677','6678','6679'
  ,'6680','6681','6682','6683','6684','6685','6686','6687','6688','6689'
  ,'6690','6691','6692','6693','6694','6695','6696','6697','6698','6699'
  ,'6700','6701','6702','6703','6704','6705','6706','6707','6708','6709'
  ,'6710','6711','6712','6713','6714','6715','6716','6717','6718','6719'
  ,'6720','6721','6722','6723','6724','6725','6726','6727','6728','6729'
  ,'6730','6731','6732','6733','6734','6735','6736','6737','6738','6739'
  ,'6740','6741','6742','6743','6744','6745','6746','6747','6748','6749'
  ,'6750','6751','6752','6753','6754','6755','6756','6757','6758','6759'
  ,'6760','6761','6762','6763','6764','6765','6766','6767','6768','6769'
  ,'6770','6771','6772','6773','6774','6775','6776','6777','6778','6779'
  ,'6780','6781','6782','6783','6784','6785','6786','6787','6788','6789'
  ,'6790','6791','6792','6793','6794','6795','6796','6797','6798','6799'
  ,'6800','6801','6802','6803','6804','6805','6806','6807','6808','6809'
  ,'6810','6811','6812','6813','6814','6815','6816','6817','6818','6819'
  ,'6820','6821','6822','6823','6824','6825','6826','6827','6828','6829'
  ,'6830','6831','6832','6833','6834','6835','6836','6837','6838','6839'
  ,'6840','6841','6842','6843','6844','6845','6846','6847','6848','6849'
  ,'6850','6851','6852','6853','6854','6855','6856','6857','6858','6859'
  ,'6860','6861','6862','6863','6864','6865','6866','6867','6868','6869'
  ,'6870','6871','6872','6873','6874','6875','6876','6877','6878','6879'
  ,'6880','6881','6882','6883','6884','6885','6886','6887','6888','6889'
  ,'6890','6891','6892','6893','6894','6895','6896','6897','6898','6899'
  ,'6900','6901','6902','6903','6904','6905','6906','6907','6908','6909'
  ,'6910','6911','6912','6913','6914','6915','6916','6917','6918','6919'
  ,'6920','6921','6922','6923','6924','6925','6926','6927','6928','6929'
  ,'6930','6931','6932','6933','6934','6935','6936','6937','6938','6939'
  ,'6940','6941','6942','6943','6944','6945','6946','6947','6948','6949'
  ,'6950','6951','6952','6953','6954','6955','6956','6957','6958','6959'
  ,'6960','6961','6962','6963','6964','6965','6966','6967','6968','6969'
  ,'6970','6971','6972','6973','6974','6975','6976','6977','6978','6979'
  ,'6980','6981','6982','6983','6984','6985','6986','6987','6988','6989'
  ,'6990','6991','6992','6993','6994','6995','6996','6997','6998','6999'
  ,'7000','7001','7002','7003','7004','7005','7006','7007','7008','7009'
  ,'7010','7011','7012','7013','7014','7015','7016','7017','7018','7019'
  ,'7020','7021','7022','7023','7024','7025','7026','7027','7028','7029'
  ,'7030','7031','7032','7033','7034','7035','7036','7037','7038','7039'
  ,'7040','7041','7042','7043','7044','7045','7046','7047','7048','7049'
  ,'7050','7051','7052','7053','7054','7055','7056','7057','7058','7059'
  ,'7060','7061','7062','7063','7064','7065','7066','7067','7068','7069'
  ,'7070','7071','7072','7073','7074','7075','7076','7077','7078','7079'
  ,'7080','7081','7082','7083','7084','7085','7086','7087','7088','7089'
  ,'7090','7091','7092','7093','7094','7095','7096','7097','7098','7099'
  ,'7100','7101','7102','7103','7104','7105','7106','7107','7108','7109'
  ,'7110','7111','7112','7113','7114','7115','7116','7117','7118','7119'
  ,'7120','7121','7122','7123','7124','7125','7126','7127','7128','7129'
  ,'7130','7131','7132','7133','7134','7135','7136','7137','7138','7139'
  ,'7140','7141','7142','7143','7144','7145','7146','7147','7148','7149'
  ,'7150','7151','7152','7153','7154','7155','7156','7157','7158','7159'
  ,'7160','7161','7162','7163','7164','7165','7166','7167','7168','7169'
  ,'7170','7171','7172','7173','7174','7175','7176','7177','7178','7179'
  ,'7180','7181','7182','7183','7184','7185','7186','7187','7188','7189'
  ,'7190','7191','7192','7193','7194','7195','7196','7197','7198','7199'
  ,'7200','7201','7202','7203','7204','7205','7206','7207','7208','7209'
  ,'7210','7211','7212','7213','7214','7215','7216','7217','7218','7219'
  ,'7220','7221','7222','7223','7224','7225','7226','7227','7228','7229'
  ,'7230','7231','7232','7233','7234','7235','7236','7237','7238','7239'
  ,'7240','7241','7242','7243','7244','7245','7246','7247','7248','7249'
  ,'7250','7251','7252','7253','7254','7255','7256','7257','7258','7259'
  ,'7260','7261','7262','7263','7264','7265','7266','7267','7268','7269'
  ,'7270','7271','7272','7273','7274','7275','7276','7277','7278','7279'
  ,'7280','7281','7282','7283','7284','7285','7286','7287','7288','7289'
  ,'7290','7291','7292','7293','7294','7295','7296','7297','7298','7299'
  ,'7300','7301','7302','7303','7304','7305','7306','7307','7308','7309'
  ,'7310','7311','7312','7313','7314','7315','7316','7317','7318','7319'
  ,'7320','7321','7322','7323','7324','7325','7326','7327','7328','7329'
  ,'7330','7331','7332','7333','7334','7335','7336','7337','7338','7339'
  ,'7340','7341','7342','7343','7344','7345','7346','7347','7348','7349'
  ,'7350','7351','7352','7353','7354','7355','7356','7357','7358','7359'
  ,'7360','7361','7362','7363','7364','7365','7366','7367','7368','7369'
  ,'7370','7371','7372','7373','7374','7375','7376','7377','7378','7379'
  ,'7380','7381','7382','7383','7384','7385','7386','7387','7388','7389'
  ,'7390','7391','7392','7393','7394','7395','7396','7397','7398','7399'
  ,'7400','7401','7402','7403','7404','7405','7406','7407','7408','7409'
  ,'7410','7411','7412','7413','7414','7415','7416','7417','7418','7419'
  ,'7420','7421','7422','7423','7424','7425','7426','7427','7428','7429'
  ,'7430','7431','7432','7433','7434','7435','7436','7437','7438','7439'
  ,'7440','7441','7442','7443','7444','7445','7446','7447','7448','7449'
  ,'7450','7451','7452','7453','7454','7455','7456','7457','7458','7459'
  ,'7460','7461','7462','7463','7464','7465','7466','7467','7468','7469'
  ,'7470','7471','7472','7473','7474','7475','7476','7477','7478','7479'
  ,'7480','7481','7482','7483','7484','7485','7486','7487','7488','7489'
  ,'7490','7491','7492','7493','7494','7495','7496','7497','7498','7499'
  ,'7500','7501','7502','7503','7504','7505','7506','7507','7508','7509'
  ,'7510','7511','7512','7513','7514','7515','7516','7517','7518','7519'
  ,'7520','7521','7522','7523','7524','7525','7526','7527','7528','7529'
  ,'7530','7531','7532','7533','7534','7535','7536','7537','7538','7539'
  ,'7540','7541','7542','7543','7544','7545','7546','7547','7548','7549'
  ,'7550','7551','7552','7553','7554','7555','7556','7557','7558','7559'
  ,'7560','7561','7562','7563','7564','7565','7566','7567','7568','7569'
  ,'7570','7571','7572','7573','7574','7575','7576','7577','7578','7579'
  ,'7580','7581','7582','7583','7584','7585','7586','7587','7588','7589'
  ,'7590','7591','7592','7593','7594','7595','7596','7597','7598','7599'
  ,'7600','7601','7602','7603','7604','7605','7606','7607','7608','7609'
  ,'7610','7611','7612','7613','7614','7615','7616','7617','7618','7619'
  ,'7620','7621','7622','7623','7624','7625','7626','7627','7628','7629'
  ,'7630','7631','7632','7633','7634','7635','7636','7637','7638','7639'
  ,'7640','7641','7642','7643','7644','7645','7646','7647','7648','7649'
  ,'7650','7651','7652','7653','7654','7655','7656','7657','7658','7659'
  ,'7660','7661','7662','7663','7664','7665','7666','7667','7668','7669'
  ,'7670','7671','7672','7673','7674','7675','7676','7677','7678','7679'
  ,'7680','7681','7682','7683','7684','7685','7686','7687','7688','7689'
  ,'7690','7691','7692','7693','7694','7695','7696','7697','7698','7699'
  ,'7700','7701','7702','7703','7704','7705','7706','7707','7708','7709'
  ,'7710','7711','7712','7713','7714','7715','7716','7717','7718','7719'
  ,'7720','7721','7722','7723','7724','7725','7726','7727','7728','7729'
  ,'7730','7731','7732','7733','7734','7735','7736','7737','7738','7739'
  ,'7740','7741','7742','7743','7744','7745','7746','7747','7748','7749'
  ,'7750','7751','7752','7753','7754','7755','7756','7757','7758','7759'
  ,'7760','7761','7762','7763','7764','7765','7766','7767','7768','7769'
  ,'7770','7771','7772','7773','7774','7775','7776','7777','7778','7779'
  ,'7780','7781','7782','7783','7784','7785','7786','7787','7788','7789'
  ,'7790','7791','7792','7793','7794','7795','7796','7797','7798','7799'
  ,'7800','7801','7802','7803','7804','7805','7806','7807','7808','7809'
  ,'7810','7811','7812','7813','7814','7815','7816','7817','7818','7819'
  ,'7820','7821','7822','7823','7824','7825','7826','7827','7828','7829'
  ,'7830','7831','7832','7833','7834','7835','7836','7837','7838','7839'
  ,'7840','7841','7842','7843','7844','7845','7846','7847','7848','7849'
  ,'7850','7851','7852','7853','7854','7855','7856','7857','7858','7859'
  ,'7860','7861','7862','7863','7864','7865','7866','7867','7868','7869'
  ,'7870','7871','7872','7873','7874','7875','7876','7877','7878','7879'
  ,'7880','7881','7882','7883','7884','7885','7886','7887','7888','7889'
  ,'7890','7891','7892','7893','7894','7895','7896','7897','7898','7899'
  ,'7900','7901','7902','7903','7904','7905','7906','7907','7908','7909'
  ,'7910','7911','7912','7913','7914','7915','7916','7917','7918','7919'
  ,'7920','7921','7922','7923','7924','7925','7926','7927','7928','7929'
  ,'7930','7931','7932','7933','7934','7935','7936','7937','7938','7939'
  ,'7940','7941','7942','7943','7944','7945','7946','7947','7948','7949'
  ,'7950','7951','7952','7953','7954','7955','7956','7957','7958','7959'
  ,'7960','7961','7962','7963','7964','7965','7966','7967','7968','7969'
  ,'7970','7971','7972','7973','7974','7975','7976','7977','7978','7979'
  ,'7980','7981','7982','7983','7984','7985','7986','7987','7988','7989'
  ,'7990','7991','7992','7993','7994','7995','7996','7997','7998','7999'
  ,'8000','8001','8002','8003','8004','8005','8006','8007','8008','8009'
  ,'8010','8011','8012','8013','8014','8015','8016','8017','8018','8019'
  ,'8020','8021','8022','8023','8024','8025','8026','8027','8028','8029'
  ,'8030','8031','8032','8033','8034','8035','8036','8037','8038','8039'
  ,'8040','8041','8042','8043','8044','8045','8046','8047','8048','8049'
  ,'8050','8051','8052','8053','8054','8055','8056','8057','8058','8059'
  ,'8060','8061','8062','8063','8064','8065','8066','8067','8068','8069'
  ,'8070','8071','8072','8073','8074','8075','8076','8077','8078','8079'
  ,'8080','8081','8082','8083','8084','8085','8086','8087','8088','8089'
  ,'8090','8091','8092','8093','8094','8095','8096','8097','8098','8099'
  ,'8100','8101','8102','8103','8104','8105','8106','8107','8108','8109'
  ,'8110','8111','8112','8113','8114','8115','8116','8117','8118','8119'
  ,'8120','8121','8122','8123','8124','8125','8126','8127','8128','8129'
  ,'8130','8131','8132','8133','8134','8135','8136','8137','8138','8139'
  ,'8140','8141','8142','8143','8144','8145','8146','8147','8148','8149'
  ,'8150','8151','8152','8153','8154','8155','8156','8157','8158','8159'
  ,'8160','8161','8162','8163','8164','8165','8166','8167','8168','8169'
  ,'8170','8171','8172','8173','8174','8175','8176','8177','8178','8179'
  ,'8180','8181','8182','8183','8184','8185','8186','8187','8188','8189'
  ,'8190','8191','8192','8193','8194','8195','8196','8197','8198','8199'
  ,'8200','8201','8202','8203','8204','8205','8206','8207','8208','8209'
  ,'8210','8211','8212','8213','8214','8215','8216','8217','8218','8219'
  ,'8220','8221','8222','8223','8224','8225','8226','8227','8228','8229'
  ,'8230','8231','8232','8233','8234','8235','8236','8237','8238','8239'
  ,'8240','8241','8242','8243','8244','8245','8246','8247','8248','8249'
  ,'8250','8251','8252','8253','8254','8255','8256','8257','8258','8259'
  ,'8260','8261','8262','8263','8264','8265','8266','8267','8268','8269'
  ,'8270','8271','8272','8273','8274','8275','8276','8277','8278','8279'
  ,'8280','8281','8282','8283','8284','8285','8286','8287','8288','8289'
  ,'8290','8291','8292','8293','8294','8295','8296','8297','8298','8299'
  ,'8300','8301','8302','8303','8304','8305','8306','8307','8308','8309'
  ,'8310','8311','8312','8313','8314','8315','8316','8317','8318','8319'
  ,'8320','8321','8322','8323','8324','8325','8326','8327','8328','8329'
  ,'8330','8331','8332','8333','8334','8335','8336','8337','8338','8339'
  ,'8340','8341','8342','8343','8344','8345','8346','8347','8348','8349'
  ,'8350','8351','8352','8353','8354','8355','8356','8357','8358','8359'
  ,'8360','8361','8362','8363','8364','8365','8366','8367','8368','8369'
  ,'8370','8371','8372','8373','8374','8375','8376','8377','8378','8379'
  ,'8380','8381','8382','8383','8384','8385','8386','8387','8388','8389'
  ,'8390','8391','8392','8393','8394','8395','8396','8397','8398','8399'
  ,'8400','8401','8402','8403','8404','8405','8406','8407','8408','8409'
  ,'8410','8411','8412','8413','8414','8415','8416','8417','8418','8419'
  ,'8420','8421','8422','8423','8424','8425','8426','8427','8428','8429'
  ,'8430','8431','8432','8433','8434','8435','8436','8437','8438','8439'
  ,'8440','8441','8442','8443','8444','8445','8446','8447','8448','8449'
  ,'8450','8451','8452','8453','8454','8455','8456','8457','8458','8459'
  ,'8460','8461','8462','8463','8464','8465','8466','8467','8468','8469'
  ,'8470','8471','8472','8473','8474','8475','8476','8477','8478','8479'
  ,'8480','8481','8482','8483','8484','8485','8486','8487','8488','8489'
  ,'8490','8491','8492','8493','8494','8495','8496','8497','8498','8499'
  ,'8500','8501','8502','8503','8504','8505','8506','8507','8508','8509'
  ,'8510','8511','8512','8513','8514','8515','8516','8517','8518','8519'
  ,'8520','8521','8522','8523','8524','8525','8526','8527','8528','8529'
  ,'8530','8531','8532','8533','8534','8535','8536','8537','8538','8539'
  ,'8540','8541','8542','8543','8544','8545','8546','8547','8548','8549'
  ,'8550','8551','8552','8553','8554','8555','8556','8557','8558','8559'
  ,'8560','8561','8562','8563','8564','8565','8566','8567','8568','8569'
  ,'8570','8571','8572','8573','8574','8575','8576','8577','8578','8579'
  ,'8580','8581','8582','8583','8584','8585','8586','8587','8588','8589'
  ,'8590','8591','8592','8593','8594','8595','8596','8597','8598','8599'
  ,'8600','8601','8602','8603','8604','8605','8606','8607','8608','8609'
  ,'8610','8611','8612','8613','8614','8615','8616','8617','8618','8619'
  ,'8620','8621','8622','8623','8624','8625','8626','8627','8628','8629'
  ,'8630','8631','8632','8633','8634','8635','8636','8637','8638','8639'
  ,'8640','8641','8642','8643','8644','8645','8646','8647','8648','8649'
  ,'8650','8651','8652','8653','8654','8655','8656','8657','8658','8659'
  ,'8660','8661','8662','8663','8664','8665','8666','8667','8668','8669'
  ,'8670','8671','8672','8673','8674','8675','8676','8677','8678','8679'
  ,'8680','8681','8682','8683','8684','8685','8686','8687','8688','8689'
  ,'8690','8691','8692','8693','8694','8695','8696','8697','8698','8699'
  ,'8700','8701','8702','8703','8704','8705','8706','8707','8708','8709'
  ,'8710','8711','8712','8713','8714','8715','8716','8717','8718','8719'
  ,'8720','8721','8722','8723','8724','8725','8726','8727','8728','8729'
  ,'8730','8731','8732','8733','8734','8735','8736','8737','8738','8739'
  ,'8740','8741','8742','8743','8744','8745','8746','8747','8748','8749'
  ,'8750','8751','8752','8753','8754','8755','8756','8757','8758','8759'
  ,'8760','8761','8762','8763','8764','8765','8766','8767','8768','8769'
  ,'8770','8771','8772','8773','8774','8775','8776','8777','8778','8779'
  ,'8780','8781','8782','8783','8784','8785','8786','8787','8788','8789'
  ,'8790','8791','8792','8793','8794','8795','8796','8797','8798','8799'
  ,'8800','8801','8802','8803','8804','8805','8806','8807','8808','8809'
  ,'8810','8811','8812','8813','8814','8815','8816','8817','8818','8819'
  ,'8820','8821','8822','8823','8824','8825','8826','8827','8828','8829'
  ,'8830','8831','8832','8833','8834','8835','8836','8837','8838','8839'
  ,'8840','8841','8842','8843','8844','8845','8846','8847','8848','8849'
  ,'8850','8851','8852','8853','8854','8855','8856','8857','8858','8859'
  ,'8860','8861','8862','8863','8864','8865','8866','8867','8868','8869'
  ,'8870','8871','8872','8873','8874','8875','8876','8877','8878','8879'
  ,'8880','8881','8882','8883','8884','8885','8886','8887','8888','8889'
  ,'8890','8891','8892','8893','8894','8895','8896','8897','8898','8899'
  ,'8900','8901','8902','8903','8904','8905','8906','8907','8908','8909'
  ,'8910','8911','8912','8913','8914','8915','8916','8917','8918','8919'
  ,'8920','8921','8922','8923','8924','8925','8926','8927','8928','8929'
  ,'8930','8931','8932','8933','8934','8935','8936','8937','8938','8939'
  ,'8940','8941','8942','8943','8944','8945','8946','8947','8948','8949'
  ,'8950','8951','8952','8953','8954','8955','8956','8957','8958','8959'
  ,'8960','8961','8962','8963','8964','8965','8966','8967','8968','8969'
  ,'8970','8971','8972','8973','8974','8975','8976','8977','8978','8979'
  ,'8980','8981','8982','8983','8984','8985','8986','8987','8988','8989'
  ,'8990','8991','8992','8993','8994','8995','8996','8997','8998','8999'
  ,'9000','9001','9002','9003','9004','9005','9006','9007','9008','9009'
  ,'9010','9011','9012','9013','9014','9015','9016','9017','9018','9019'
  ,'9020','9021','9022','9023','9024','9025','9026','9027','9028','9029'
  ,'9030','9031','9032','9033','9034','9035','9036','9037','9038','9039'
  ,'9040','9041','9042','9043','9044','9045','9046','9047','9048','9049'
  ,'9050','9051','9052','9053','9054','9055','9056','9057','9058','9059'
  ,'9060','9061','9062','9063','9064','9065','9066','9067','9068','9069'
  ,'9070','9071','9072','9073','9074','9075','9076','9077','9078','9079'
  ,'9080','9081','9082','9083','9084','9085','9086','9087','9088','9089'
  ,'9090','9091','9092','9093','9094','9095','9096','9097','9098','9099'
  ,'9100','9101','9102','9103','9104','9105','9106','9107','9108','9109'
  ,'9110','9111','9112','9113','9114','9115','9116','9117','9118','9119'
  ,'9120','9121','9122','9123','9124','9125','9126','9127','9128','9129'
  ,'9130','9131','9132','9133','9134','9135','9136','9137','9138','9139'
  ,'9140','9141','9142','9143','9144','9145','9146','9147','9148','9149'
  ,'9150','9151','9152','9153','9154','9155','9156','9157','9158','9159'
  ,'9160','9161','9162','9163','9164','9165','9166','9167','9168','9169'
  ,'9170','9171','9172','9173','9174','9175','9176','9177','9178','9179'
  ,'9180','9181','9182','9183','9184','9185','9186','9187','9188','9189'
  ,'9190','9191','9192','9193','9194','9195','9196','9197','9198','9199'
  ,'9200','9201','9202','9203','9204','9205','9206','9207','9208','9209'
  ,'9210','9211','9212','9213','9214','9215','9216','9217','9218','9219'
  ,'9220','9221','9222','9223','9224','9225','9226','9227','9228','9229'
  ,'9230','9231','9232','9233','9234','9235','9236','9237','9238','9239'
  ,'9240','9241','9242','9243','9244','9245','9246','9247','9248','9249'
  ,'9250','9251','9252','9253','9254','9255','9256','9257','9258','9259'
  ,'9260','9261','9262','9263','9264','9265','9266','9267','9268','9269'
  ,'9270','9271','9272','9273','9274','9275','9276','9277','9278','9279'
  ,'9280','9281','9282','9283','9284','9285','9286','9287','9288','9289'
  ,'9290','9291','9292','9293','9294','9295','9296','9297','9298','9299'
  ,'9300','9301','9302','9303','9304','9305','9306','9307','9308','9309'
  ,'9310','9311','9312','9313','9314','9315','9316','9317','9318','9319'
  ,'9320','9321','9322','9323','9324','9325','9326','9327','9328','9329'
  ,'9330','9331','9332','9333','9334','9335','9336','9337','9338','9339'
  ,'9340','9341','9342','9343','9344','9345','9346','9347','9348','9349'
  ,'9350','9351','9352','9353','9354','9355','9356','9357','9358','9359'
  ,'9360','9361','9362','9363','9364','9365','9366','9367','9368','9369'
  ,'9370','9371','9372','9373','9374','9375','9376','9377','9378','9379'
  ,'9380','9381','9382','9383','9384','9385','9386','9387','9388','9389'
  ,'9390','9391','9392','9393','9394','9395','9396','9397','9398','9399'
  ,'9400','9401','9402','9403','9404','9405','9406','9407','9408','9409'
  ,'9410','9411','9412','9413','9414','9415','9416','9417','9418','9419'
  ,'9420','9421','9422','9423','9424','9425','9426','9427','9428','9429'
  ,'9430','9431','9432','9433','9434','9435','9436','9437','9438','9439'
  ,'9440','9441','9442','9443','9444','9445','9446','9447','9448','9449'
  ,'9450','9451','9452','9453','9454','9455','9456','9457','9458','9459'
  ,'9460','9461','9462','9463','9464','9465','9466','9467','9468','9469'
  ,'9470','9471','9472','9473','9474','9475','9476','9477','9478','9479'
  ,'9480','9481','9482','9483','9484','9485','9486','9487','9488','9489'
  ,'9490','9491','9492','9493','9494','9495','9496','9497','9498','9499'
  ,'9500','9501','9502','9503','9504','9505','9506','9507','9508','9509'
  ,'9510','9511','9512','9513','9514','9515','9516','9517','9518','9519'
  ,'9520','9521','9522','9523','9524','9525','9526','9527','9528','9529'
  ,'9530','9531','9532','9533','9534','9535','9536','9537','9538','9539'
  ,'9540','9541','9542','9543','9544','9545','9546','9547','9548','9549'
  ,'9550','9551','9552','9553','9554','9555','9556','9557','9558','9559'
  ,'9560','9561','9562','9563','9564','9565','9566','9567','9568','9569'
  ,'9570','9571','9572','9573','9574','9575','9576','9577','9578','9579'
  ,'9580','9581','9582','9583','9584','9585','9586','9587','9588','9589'
  ,'9590','9591','9592','9593','9594','9595','9596','9597','9598','9599'
  ,'9600','9601','9602','9603','9604','9605','9606','9607','9608','9609'
  ,'9610','9611','9612','9613','9614','9615','9616','9617','9618','9619'
  ,'9620','9621','9622','9623','9624','9625','9626','9627','9628','9629'
  ,'9630','9631','9632','9633','9634','9635','9636','9637','9638','9639'
  ,'9640','9641','9642','9643','9644','9645','9646','9647','9648','9649'
  ,'9650','9651','9652','9653','9654','9655','9656','9657','9658','9659'
  ,'9660','9661','9662','9663','9664','9665','9666','9667','9668','9669'
  ,'9670','9671','9672','9673','9674','9675','9676','9677','9678','9679'
  ,'9680','9681','9682','9683','9684','9685','9686','9687','9688','9689'
  ,'9690','9691','9692','9693','9694','9695','9696','9697','9698','9699'
  ,'9700','9701','9702','9703','9704','9705','9706','9707','9708','9709'
  ,'9710','9711','9712','9713','9714','9715','9716','9717','9718','9719'
  ,'9720','9721','9722','9723','9724','9725','9726','9727','9728','9729'
  ,'9730','9731','9732','9733','9734','9735','9736','9737','9738','9739'
  ,'9740','9741','9742','9743','9744','9745','9746','9747','9748','9749'
  ,'9750','9751','9752','9753','9754','9755','9756','9757','9758','9759'
  ,'9760','9761','9762','9763','9764','9765','9766','9767','9768','9769'
  ,'9770','9771','9772','9773','9774','9775','9776','9777','9778','9779'
  ,'9780','9781','9782','9783','9784','9785','9786','9787','9788','9789'
  ,'9790','9791','9792','9793','9794','9795','9796','9797','9798','9799'
  ,'9800','9801','9802','9803','9804','9805','9806','9807','9808','9809'
  ,'9810','9811','9812','9813','9814','9815','9816','9817','9818','9819'
  ,'9820','9821','9822','9823','9824','9825','9826','9827','9828','9829'
  ,'9830','9831','9832','9833','9834','9835','9836','9837','9838','9839'
  ,'9840','9841','9842','9843','9844','9845','9846','9847','9848','9849'
  ,'9850','9851','9852','9853','9854','9855','9856','9857','9858','9859'
  ,'9860','9861','9862','9863','9864','9865','9866','9867','9868','9869'
  ,'9870','9871','9872','9873','9874','9875','9876','9877','9878','9879'
  ,'9880','9881','9882','9883','9884','9885','9886','9887','9888','9889'
  ,'9890','9891','9892','9893','9894','9895','9896','9897','9898','9899'
  ,'9900','9901','9902','9903','9904','9905','9906','9907','9908','9909'
  ,'9910','9911','9912','9913','9914','9915','9916','9917','9918','9919'
  ,'9920','9921','9922','9923','9924','9925','9926','9927','9928','9929'
  ,'9930','9931','9932','9933','9934','9935','9936','9937','9938','9939'
  ,'9940','9941','9942','9943','9944','9945','9946','9947','9948','9949'
  ,'9950','9951','9952','9953','9954','9955','9956','9957','9958','9959'
  ,'9960','9961','9962','9963','9964','9965','9966','9967','9968','9969'
  ,'9970','9971','9972','9973','9974','9975','9976','9977','9978','9979'
  ,'9980','9981','9982','9983','9984','9985','9986','9987','9988','9989'
  ,'9990','9991','9992','9993','9994','9995','9996','9997','9998','9999'
);

DATA3 : packed array[0..$ff] of packed array[0..1] of char = (
  '00','01','02','03','04','05','06','07',
  '08','09','0A','0B','0C','0D','0E','0F',
  '10','11','12','13','14','15','16','17',
  '18','19','1A','1B','1C','1D','1E','1F',
  '20','21','22','23','24','25','26','27',
  '28','29','2A','2B','2C','2D','2E','2F',
  '30','31','32','33','34','35','36','37',
  '38','39','3A','3B','3C','3D','3E','3F',
  '40','41','42','43','44','45','46','47',
  '48','49','4A','4B','4C','4D','4E','4F',
  '50','51','52','53','54','55','56','57',
  '58','59','5A','5B','5C','5D','5E','5F',
  '60','61','62','63','64','65','66','67',
  '68','69','6A','6B','6C','6D','6E','6F',
  '70','71','72','73','74','75','76','77',
  '78','79','7A','7B','7C','7D','7E','7F',
  '80','81','82','83','84','85','86','87',
  '88','89','8A','8B','8C','8D','8E','8F',
  '90','91','92','93','94','95','96','97',
  '98','99','9A','9B','9C','9D','9E','9F',
  'A0','A1','A2','A3','A4','A5','A6','A7',
  'A8','A9','AA','AB','AC','AD','AE','AF',
  'B0','B1','B2','B3','B4','B5','B6','B7',
  'B8','B9','BA','BB','BC','BD','BE','BF',
  'C0','C1','C2','C3','C4','C5','C6','C7',
  'C8','C9','CA','CB','CC','CD','CE','CF',
  'D0','D1','D2','D3','D4','D5','D6','D7',
  'D8','D9','DA','DB','DC','DD','DE','DF',
  'E0','E1','E2','E3','E4','E5','E6','E7',
  'E8','E9','EA','EB','EC','ED','EE','EF',
  'F0','F1','F2','F3','F4','F5','F6','F7',
  'F8','F9','FA','FB','FC','FD','FE','FF'
  );

type
  PW64 = ^UInt64;
  PDWord = ^Cardinal;
  PWord = ^Word;
  ThreeWord = array[0..2] of word;
  P3Word = ^ThreeWord;
function IntToStr2(i : integer):String;
label done,digit_1,digit_2,digit_3,digit_4,digit_5,digit_6,digit_7,digit_8,digit_9;
var
  a,j : Cardinal;
  R : PW64;
begin
  if i<0 then begin
    j := -i;
    if j<10 then begin
      SetLength(Result,2);
      PDWord(Result)^ := PDWord(@data1[i])^;
      goto done;
    end;
    if j<100 then begin
      SetLength(Result,3);
      P3Word(Result)^ := P3Word(@Data1[i])^;
      goto done;
    end;
    if j<1000 then begin
      SetLength(Result,4);
      PW64(Result)^ := UInt64(Data1[i]);
      goto done;
    end;
    if j<10000 then begin
      a := j div 10;
      SetLength(Result,5);
      j := j-a*10;
      PW64(Result)^ := UInt64(Data1[-a]);
      R := PW64(IntPtr(Result)+8);
      goto digit_1;
    end;
    if j<100000 then begin
      a := j div 100;
      SetLength(Result,6);
      j := j-a*100;
      PW64(Result)^ := UInt64(Data1[-a]);
      R := PW64(IntPtr(Result)+8);
      goto digit_2;
    end;
    if j<1000000 then begin
      a := j div 1000;
      SetLength(Result,7);
      j := j-a*1000;
      PW64(Result)^ := UInt64(Data1[-a]);
      R := PW64(IntPtr(Result)+8);
      goto digit_3;
    end;
    if j<10000000 then begin
      a := j div 10000;
      SetLength(Result,8);
      j := j-a*10000;
      PW64(Result)^ := UInt64(Data1[-a]);
      R := PW64(IntPtr(Result)+8);
      goto digit_4;
    end;
    if j<100000000 then begin
      a := j div 100000;
      SetLength(Result,9);
      j := j-a*100000;
      PW64(Result)^ := UInt64(Data1[-a]);
      R := PW64(IntPtr(Result)+8);
      goto digit_5;
    end;
    if j<1000000000 then begin
      a := j div 1000000;
      SetLength(Result,10);
      j := j-a*1000000;
      PW64(Result)^ := UInt64(Data1[-a]);
      R := PW64(IntPtr(Result)+8);
      goto digit_6;
    end;
    a := j div 10000000;
    SetLength(Result,11);
    j := j-a*10000000;
    PW64(Result)^ := UInt64(Data1[-a]);
    R := PW64(IntPtr(Result)+8);
    goto digit_7;
  end else begin
    j := i;
    if j<10 then begin
      SetLength(Result,1);
      PWord(Result)^ := PWord(@data1[j])^;
      goto done;
    end;
    if j<100 then begin
      SetLength(Result,2);
      PDWord(Result)^ := PDWord(@data1[j])^;
      goto done;
    end;
    if j<1000 then begin
      SetLength(Result,3);
      P3Word(Result)^ := P3Word(@data1[j])^;
      goto done;
    end;
    if j<10000 then begin
      SetLength(Result,4);
      PW64(Result)^ := UInt64(data2[j]);
      goto done;
    end;
    if j<100000 then begin
      SetLength(Result,5);
      R := PW64(Result);
      goto digit_5;
    end;
    if j<1000000 then begin
      SetLength(Result,6);
      R := PW64(Result);
      goto digit_6;
    end;
    if j<10000000 then begin
      SetLength(Result,7);
      R := PW64(Result);
      goto digit_7;
    end;
    if j<100000000 then begin
      SetLength(Result,8);
      R := PW64(Result);
      goto digit_8;
    end;
    if j<1000000000 then begin
      SetLength(Result,9);
      R := PW64(Result);
      goto digit_9;
    end;
    SetLength(Result,10);
    R := PW64(Result);
  end;
  a := j div 1000000;
  j := j-a*1000000;
  R^ := UInt64(Data2[a]);
  inc(R);
digit_6:
  a := j div 100;
  j := j - a * 100;
  R^ := UInt64(Data2[a]);
  inc(R);
digit_2:
  PDWord(R)^ := PDWord(@Data1[j])^;
  goto done;
digit_9:
  a := j div 100000;
  j := j - a * 100000;
  R^ := UInt64(Data2[a]);
  inc(R);
digit_5:
  a := j div 10;
  j := j - a * 10;
  R^ := UInt64(Data2[a]);
  inc(R);
digit_1:
  PWord(R)^ := PWord(@Data1[j])^;
  goto done;
digit_8:
  a := j div 10000;
  j := j - a * 10000;
  R^ := UInt64(Data2[a]);
  inc(R);
digit_4:
  R^ := UInt64(Data2[j]);
  goto done;
digit_7:
  a := j div 1000;
  j := j - a * 1000;
  R^ := UInt64(Data2[a]);
  inc(R);
digit_3:
  P3Word(R)^ := P3Word(@Data1[j])^;
done:
end;

function UIntToStr2(j : Cardinal):String;
label done,digit_1,digit_2,digit_3,digit_4,digit_5,digit_6,digit_7,digit_8,digit_9;
var
  a : Cardinal;
  R : PW64;
begin
  if j<10 then begin
    SetLength(Result,1);
    PWord(Result)^ := PWord(@data1[j])^;
    goto done;
  end;
  if j<100 then begin
    SetLength(Result,2);
    PDWord(Result)^ := PDWord(@data1[j])^;
    goto done;
  end;
  if j<1000 then begin
    SetLength(Result,3);
    P3Word(Result)^ := P3Word(@data1[j])^;
    goto done;
  end;
  if j<10000 then begin
    SetLength(Result,4);
    PW64(Result)^ := UInt64(Data2[j]);
    goto done;
  end;
  if j<100000 then begin
    SetLength(Result,5);
    R := PW64(Result);
    goto digit_5;
  end;
  if j<1000000 then begin
    SetLength(Result,6);
    R := PW64(Result);
    goto digit_6;
  end;
  if j<10000000 then begin
    SetLength(Result,7);
    R := PW64(Result);
    goto digit_7;
  end;
  if j<100000000 then begin
    SetLength(Result,8);
    R := PW64(Result);
    goto digit_8;
  end;
  if j<1000000000 then begin
    SetLength(Result,9);
    R := PW64(Result);
    goto digit_9;
  end;
  SetLength(Result,10);
  R := PW64(Result);
  a := j div 1000000;
  j := j-a*1000000;
  R^ := UInt64(Data2[a]);
  inc(R);
digit_6:
  a := j div 100;
  j := j - a * 100;
  R^ := UInt64(Data2[a]);
  inc(R);
digit_2:
  PDWord(R)^ := PDWord(@Data1[j])^;
  goto done;
digit_9:
  a := j div 100000;
  j := j - a * 100000;
  R^ := UInt64(Data2[a]);
  inc(R);
digit_5:
  a := j div 10;
  j := j - a * 10;
  R^ := UInt64(Data2[a]);
  inc(R);
digit_1:
  PWord(R)^ := PWord(@Data1[j])^;
  goto done;
digit_8:
  a := j div 10000;
  j := j - a * 10000;
  R^ := UInt64(Data2[a]);
  inc(R);
digit_4:
  R^ := UInt64(Data2[j]);
  goto done;
digit_7:
  a := j div 1000;
  j := j - a * 1000;
  R^ := UInt64(Data2[a]);
  inc(R);
digit_3:
  P3Word(R)^ := P3Word(@Data1[j])^;
done:
end;

function Div64_3(var a :UInt64; const b : Uint64):Cardinal; inline;
var d : Cardinal;
    c : Uint64;
begin
  Result := 0;
  c := b shl 9;
  d := 1 shl 9;
  while a>=b do begin
    if a>=c then begin
      a := a-c;
      Result := Result+d;
    end;
    c := c shr 1;
    d := d shr 1;
  end;
end;

function Div64_4(var a :UInt64; const b : Uint64):Cardinal; inline;
var d : Cardinal;
    c : Uint64;
begin
  Result := 0;
  c := b shl 13;
  d := 1 shl 13;
  while a>=b do begin
    if a>=c then begin
      a := a-c;
      Result := Result+d;
    end;
    c := c shr 1;
    d := d shr 1;
  end;
end;

function Div64_8(var a :UInt64; const b : Uint64):Cardinal; inline;
var d : Cardinal;
    c : Uint64;
begin
  Result := 0;
  c := b shl 26;
  d := 1 shl 26;
  while a>=b do begin
    if a>=c then begin
      a := a-c;
      Result := Result+d;
    end;
    c := c shr 1;
    d := d shr 1;
  end;
end;

function UIntToStr2(j64 : UInt64):String;
label done,digit_1,digit_2,digit_3,digit_4,digit_5,digit_6,digit_7,digit_8,digit_9,
  digit_10,digit_11,digit_12,digit_13,digit_14,digit_15,digit_16,digit_17,digit_18,
  digit_19;
var
  a,j,k,l : Cardinal;
  R : PW64;
begin
  if J64<=high(Cardinal) then begin
    j := J64;
    if j<10 then begin
      SetLength(Result,1);
      PWord(Result)^ := PWord(@data1[j])^;
      goto done;
    end;
    if j<100 then begin
      SetLength(Result,2);
      PDWord(Result)^ := PDWord(@data1[j])^;
      goto done;
    end;
    if j<1000 then begin
      SetLength(Result,3);
      P3Word(Result)^ := P3Word(@data1[j])^;
      goto done;
    end;
    if j<10000 then begin
      SetLength(Result,4);
      PW64(Result)^ := UInt64(Data2[j]);
      goto done;
    end;
    if j<100000 then begin
      SetLength(Result,5);
      R := PW64(Result);
      goto digit_5;
    end;
    if j<1000000 then begin
      SetLength(Result,6);
      R := PW64(Result);
      goto digit_6;
    end;
    if j<10000000 then begin
      SetLength(Result,7);
      R := PW64(Result);
      goto digit_7;
    end;
    if j<100000000 then begin
      SetLength(Result,8);
      R := PW64(Result);
      goto digit_8;
    end;
    if j<1000000000 then begin
      SetLength(Result,9);
      R := PW64(Result);
      goto digit_9;
    end;
    k := j div 1000000;
    j := j - k*1000000;
    SetLength(Result,10);
    R := PW64(Result);
    goto digit_10;
  end else begin
    if j64<10000000000 then begin
      {$IFDEF CPU64BITS}
      k := j64 div 1000000;
      j := j64 - k*1000000;
      {$ELSE}
      k := Div64_4(j64,1000000);
      j := j64;
      {$ENDIF}
      SetLength(Result,10);
      R := PW64(Result);
      goto digit_10;
    end;
    if j64<100000000000 then begin
      {$IFDEF CPU64BITS}
      k := j64 div 10000000;
      j := j64 - k*10000000;
      {$ELSE}
      k := Div64_4(j64,10000000);
      j := j64;
      {$ENDIF}
      SetLength(Result,11);
      R := PW64(Result);
      goto digit_11;
    end;
    if j64<1000000000000 then begin
      {$IFDEF CPU64BITS}
      k := j64 div 100000000;
      j := j64 - k*100000000;
      {$ELSE}
      k := Div64_4(j64,100000000);
      j := j64;
      {$ENDIF}
      SetLength(Result,12);
      R := PW64(Result);
      goto digit_12;
    end;
    if j64<10000000000000 then begin
      {$IFDEF CPU64BITS}
      k := j64 div 1000000000;
      j := j64 - k*1000000000;
      {$ELSE}
      k := Div64_4(j64,1000000000);
      j := j64;
      {$ENDIF}
      SetLength(Result,13);
      R := PW64(Result);
      goto digit_13;
    end;
    if j64<100000000000000 then begin
      {$IFDEF CPU64BITS}
      k := j64 div 1000000;
      j := j64 - k*1000000;
      {$ELSE}
      k := Div64_8(j64,1000000);
      j := j64;
      {$ENDIF}
      SetLength(Result,14);
      R := PW64(Result);
      goto digit_14;
    end;
    if j64<1000000000000000 then begin
      {$IFDEF CPU64BITS}
      k := j64 div 10000000;
      j := j64 - k*10000000;
      {$ELSE}
      k := Div64_8(j64,10000000);
      j := j64;
      {$ENDIF}
      SetLength(Result,15);
      R := PW64(Result);
      goto digit_15;
    end;
    if j64<10000000000000000 then begin
      {$IFDEF CPU64BITS}
      k := j64 div 100000000;
      j := j64 - k*100000000;
      {$ELSE}
      k := Div64_8(j64,100000000);
      j := j64;
      {$ENDIF}
      SetLength(Result,16);
      R := PW64(Result);
      goto digit_16;
    end;
    if j64<100000000000000000 then begin
      {$IFDEF CPU64BITS}
      k := j64 div 1000000000;
      j := j64 - k*1000000000;
      {$ELSE}
      k := Div64_8(j64,1000000000);
      j := j64;
      {$ENDIF}
      SetLength(Result,17);
      R := PW64(Result);
      goto digit_17;
    end;
    if j64<1000000000000000000 then begin
      {$IFDEF CPU64BITS}
      l := j64 div UInt64(100000000000000);
      j64 := j64-l*UInt64(100000000000000);
      k := j64 div 1000000;
      j := j64 - k*1000000;
      {$ELSE}
      l := Div64_4(j64,100000000000000);
      k := Div64_8(j64,1000000);
      j := j64;
      {$ENDIF}
      SetLength(Result,18);
      R := PW64(Result);
      goto digit_18;
    end;
    if j64<10000000000000000000 then begin
      {$IFDEF CPU64BITS}
      l := j64 div UInt64(1000000000000000);
      j64 := j64-l*UInt64(1000000000000000);
      k := j64 div 10000000;
      j := j64 - k*10000000;
      {$ELSE}
      l := Div64_4(j64,1000000000000000);
      k := Div64_8(j64,10000000);
      j := j64;
      {$ENDIF}
      SetLength(Result,19);
      R := PW64(Result);
      goto digit_19;
    end;
    {$IFDEF CPU64BITS}
    l := j64 div UInt64(10000000000000000);
    j64 := j64-l*UInt64(10000000000000000);
    k := j64 div 100000000;
    j := j64 - k*100000000;
    {$ELSE}
    l := Div64_4(j64,10000000000000000);
    k := Div64_8(j64,100000000);
    j := j64;
    {$ENDIF}
    SetLength(Result,20);
    R := PW64(Result);
  end;
  R^ := UInt64(data2[l]);
  inc(R);
digit_16:
  a := k div 10000;
  k := k-a*10000;
  R^ := UInt64(data2[a]);
  inc(R);
digit_12:
  R^ := UInt64(data2[k]);
  inc(R);
digit_8:
  a := j div 10000;
  j := j-a*10000;
  R^ := UInt64(data2[a]);
  inc(R);
digit_4:
  R^ := UInt64(data2[j]);
  goto done;
digit_19:
  R^ := UInt64(data2[l]);
  inc(R);
digit_15:
  a := k div 10000;
  k := k - a*10000;
  R^ := UInt64(data2[a]);
  inc(R);
digit_11:
  R^ := UInt64(data2[k]);
  inc(R);
digit_7:
  a := j div 1000;
  j := j-a*1000;
  R^ := UInt64(data2[a]);
  inc(R);
digit_3:
  P3WORD(R)^:=P3WORD(@data1[j])^;
  goto done;
digit_18:
  R^ := UInt64(data2[l]);
  inc(R);
digit_14:
  a := k div 10000;
  k := k-a*10000;
  R^ := UInt64(data2[a]);
  inc(R);
digit_10:
  R^ := UInt64(data2[k]);
  inc(R);
digit_6:
  a := j div 100;
  j := j-a*100;
  R^ := UInt64(data2[a]);
  inc(R);
digit_2:
  PDWORD(R)^:=PDWORD(@data1[j])^;
  goto done;
digit_17:
  a := k div 10000;
  k := k-a*10000;
  R^ := UInt64(data2[a]);
  inc(R);
digit_13:
  R^ := UInt64(data2[k]);
  inc(R);
digit_9:
  a := j div 100000;
  j := j-a*100000;
  R^ := UInt64(data2[a]);
  inc(R);
digit_5:
  a := j div 10;
  j := j-a*10;
  R^ := UInt64(data2[a]);
  inc(R);
digit_1:
  PWord(R)^ := PWord(@data1[j])^;
done:
end;

function IntToStr2(i64 : Int64):String;
label done,digit_1,digit_2,digit_3,digit_4,digit_5,digit_6,digit_7,digit_8,digit_9,
  digit_10,digit_11,digit_12,digit_13,digit_14,digit_15,digit_16,digit_17,digit_18,
  digit_19;
var
  j64 : UInt64;
  a,j,k,l : Cardinal;
  i : integer;
  R : PW64;
begin
  if i64<0 then begin
    j64 := -i64;
    if J64<=high(Cardinal) then begin
      i := i64;
      j := j64;
      if J<10 then begin
        SetLength(Result,2);
        PDWord(Result)^ := PDWord(@data1[i])^;
        goto done;
      end;
      if J<100 then begin
        SetLength(Result,3);
        P3Word(Result)^ := P3Word(@data1[i])^;
        goto done;
      end;
      if J<1000 then begin
        SetLength(Result,4);
        PW64(Result)^ := UInt64(data1[i]);
        goto done;
      end;
      if J<10000 then begin
        a := j div 10;
        SetLength(Result,5);
        j := j-a*10;
        PW64(Result)^ := UInt64(data1[-a]);
        R := PW64(Intptr(Result)+SizeOf(UInt64));
        goto digit_1;
      end;
      if J<100000 then begin
        a := j div 100;
        SetLength(Result,6);
        j := j-a*100;
        PW64(Result)^ := UInt64(data1[-a]);
        R := PW64(Intptr(Result)+8);
        goto digit_2;
      end;
      if J<1000000 then begin
        a := j div 1000;
        SetLength(Result,7);
        j := j-a*1000;
        PW64(Result)^ := UInt64(data1[-a]);
        R := PW64(Intptr(Result)+8);
        goto digit_3;
      end;
      if J<10000000 then begin
        a := j div 10000;
        SetLength(Result,8);
        j := j-a*10000;
        PW64(Result)^ := UInt64(data1[-a]);
        R := PW64(Intptr(Result)+8);
        goto digit_4;
      end;
      if J<100000000 then begin
        a := j div 100000;
        SetLength(Result,9);
        j := j-a*100000;
        PW64(Result)^ := UInt64(data1[-a]);
        R := PW64(Intptr(Result)+8);
        goto digit_5;
      end;
      if J<1000000000 then begin
        a := j div 1000000;
        SetLength(Result,10);
        j := j-a*1000000;
        PW64(Result)^ := UInt64(data1[-a]);
        R := PW64(Intptr(Result)+8);
        goto digit_6;
      end;
      a := j div 10000000;
      SetLength(Result,11);
      j := j-a*10000000;
      PW64(Result)^ := UInt64(data1[-a]);
      R := PW64(Intptr(Result)+8);
      goto digit_7;
    end else begin
      if J64<10000000000 then begin
        {$IFDEF CPU64BITS}
        a := j64 div 10000000;
        j := j64-a*10000000;
        {$ELSE}
        a := div64_3(j64,10000000);
        j := j64;
        {$ENDIF}
        SetLength(Result,11);
        PW64(Result)^ := UInt64(data1[-a]);
        R := PW64(Intptr(Result)+SizeOf(UInt64));
        goto digit_7;
      end;
      if J64<100000000000 then begin
        {$IFDEF CPU64BITS}
        a := j64 div 100000000;
        j := j64-a*100000000;
        {$ELSE}
        a := div64_3(j64,100000000);
        j := j64;
        {$ENDIF}
        SetLength(Result,12);
        PW64(Result)^ := UInt64(data1[-a]);
        R := PW64(Intptr(Result)+SizeOf(UInt64));
        goto digit_8;
      end;
      if J64<1000000000000 then begin
        {$IFDEF CPU64BITS}
        a := j64 div 1000000000;
        j := j64-a*1000000000;
        {$ELSE}
        a := div64_3(j64,1000000000);
        j := j64;
        {$ENDIF}
        SetLength(Result,13);
        PW64(Result)^ := UInt64(data1[-a]);
        R := PW64(Intptr(Result)+8);
        goto digit_9;
      end;
      if J64<10000000000000 then begin
        {$IFDEF CPU64BITS}
        a := j64 div UInt64(10000000000);
        j64 := j64-a*UInt64(10000000000);
        k := j64 div 1000000;
        j := j64 - k*1000000;
        {$ELSE}
        a := div64_3(j64,10000000000);
        k := Div64_4(J64,1000000);
        j := j64;
        {$ENDIF}
        SetLength(Result,14);
        PW64(Result)^ := UInt64(data1[-a]);
        R := PW64(Intptr(Result)+8);
        goto digit_10;
      end;
      if J64<100000000000000 then begin
        {$IFDEF CPU64BITS}
        a := j64 div UInt64(100000000000);
        j64 := j64-a*UInt64(100000000000);
        k := j64 div 10000000;
        j := j64 - k*10000000;
        {$ELSE}
        a := div64_3(j64,100000000000);
        k := Div64_4(J64,10000000);
        j := j64;
        {$ENDIF}
        SetLength(Result,15);
        PW64(Result)^ := UInt64(data1[-a]);
        R := PW64(Intptr(Result)+8);
        goto digit_11;
      end;
      if J64<1000000000000000 then begin
        {$IFDEF CPU64BITS}
        a := j64 div UInt64(1000000000000);
        j64 := j64-a*UInt64(1000000000000);
        k := j64 div 100000000;
        j := j64 - k*100000000;
        {$ELSE}
        a := div64_3(j64,1000000000000);
        k := Div64_4(J64,100000000);
        j := j64;
        {$ENDIF}
        SetLength(Result,16);
        PW64(Result)^ := UInt64(data1[-a]);
        R := PW64(Intptr(Result)+8);
        goto digit_12;
      end;
      if J64<10000000000000000 then begin
        {$IFDEF CPU64BITS}
        a := j64 div UInt64(10000000000000);
        j64 := j64-a*UInt64(10000000000000);
        k := j64 div 1000000000;
        j := j64 - k*1000000000;
        {$ELSE}
        a := div64_3(j64,10000000000000);
        k := Div64_4(J64,1000000000);
        j := j64;
        {$ENDIF}
        SetLength(Result,17);
        PW64(Result)^ := UInt64(data1[-a]);
        R := PW64(Intptr(Result)+8);
        goto digit_13;
      end;
      if J64<100000000000000000 then begin
        {$IFDEF CPU64BITS}
        a := j64 div UInt64(100000000000000);
        j64 := j64-a*UInt64(100000000000000);
        k := j64 div 1000000;
        j := j64 - k*1000000;
        {$ELSE}
        a := div64_3(j64,100000000000000);
        k := Div64_8(J64,1000000);
        j := j64;
        {$ENDIF}
        SetLength(Result,18);
        PW64(Result)^ := UInt64(data1[-a]);
        R := PW64(Intptr(Result)+8);
        goto digit_14;
      end;
      if J64<1000000000000000000 then begin
        {$IFDEF CPU64BITS}
        a := j64 div UInt64(1000000000000000);
        j64 := j64-a*UInt64(1000000000000000);
        k := j64 div 10000000;
        j := j64 - k*10000000;
        {$ELSE}
        a := div64_3(j64,1000000000000000);
        k := Div64_8(J64,10000000);
        j := j64;
        {$ENDIF}
        SetLength(Result,19);
        PW64(Result)^ := UInt64(data1[-a]);
        R := PW64(Intptr(Result)+8);
        goto digit_15;
      end;
      {$IFDEF CPU64BITS}
      a := j64 div UInt64(10000000000000000);
      j64 := j64-a*UInt64(10000000000000000);
      k := j64 div 100000000;
      j := j64 - k*100000000;
      {$ELSE}
      a := div64_3(j64,10000000000000000);
      k := Div64_8(J64,100000000);
      j := j64;
      {$ENDIF}
      SetLength(Result,20);
      PW64(Result)^ := UInt64(data1[-a]);
      R := PW64(Intptr(Result)+8);
      goto digit_16;
    end;
  end else begin
    J64 := i64;
    if J64<=high(Cardinal) then begin
      j := J64;
      if j<10 then begin
        SetLength(Result,1);
        PWord(Result)^ := PWord(@data1[j])^;
        goto done;
      end;
      if j<100 then begin
        SetLength(Result,2);
        PDWord(Result)^ := PDWord(@data1[j])^;
        goto done;
      end;
      if j<1000 then begin
        SetLength(Result,3);
        P3Word(Result)^ := P3Word(@data1[j])^;
        goto done;
      end;
      if j<10000 then begin
        SetLength(Result,4);
        PW64(Result)^ := UInt64(Data2[j]);
        goto done;
      end;
      if j<100000 then begin
        SetLength(Result,5);
        R := PW64(Result);
        goto digit_5;
      end;
      if j<1000000 then begin
        SetLength(Result,6);
        R := PW64(Result);
        goto digit_6;
      end;
      if j<10000000 then begin
        SetLength(Result,7);
        R := PW64(Result);
        goto digit_7;
      end;
      if j<100000000 then begin
        SetLength(Result,8);
        R := PW64(Result);
        goto digit_8;
      end;
      if j<1000000000 then begin
        SetLength(Result,9);
        R := PW64(Result);
        goto digit_9;
      end;
      k := j div 1000000;
      SetLength(Result,10);
      j := j - k*1000000;
      R := PW64(Result);
      goto digit_10;
    end else begin
      if j64<10000000000 then begin
        {$IFDEF CPU64BITS}
        k := j64 div 1000000;
        j := j64 - k*1000000;
        {$ELSE}
        k := Div64_4(j64,1000000);
        j := j64;
        {$ENDIF}
        SetLength(Result,10);
        R := PW64(Result);
        goto digit_10;
      end;
      if j64<100000000000 then begin
        {$IFDEF CPU64BITS}
        k := j64 div 10000000;
        j := j64 - k*10000000;
        {$ELSE}
        k := Div64_4(j64,10000000);
        j := j64;
        {$ENDIF}
        SetLength(Result,11);
        R := PW64(Result);
        goto digit_11;
      end;
      if j64<1000000000000 then begin
        {$IFDEF CPU64BITS}
        k := j64 div 100000000;
        j := j64 - k*100000000;
        {$ELSE}
        k := Div64_4(j64,100000000);
        j := j64;
        {$ENDIF}
        SetLength(Result,12);
        R := PW64(Result);
        goto digit_12;
      end;
      if j64<10000000000000 then begin
        {$IFDEF CPU64BITS}
        k := j64 div 1000000000;
        j := j64 - k*1000000000;
        {$ELSE}
        k := Div64_4(j64,1000000000);
        j := j64;
        {$ENDIF}
        SetLength(Result,13);
        R := PW64(Result);
        goto digit_13;
      end;
      if j64<100000000000000 then begin
        {$IFDEF CPU64BITS}
        k := j64 div 1000000;
        j := j64 - k*1000000;
        {$ELSE}
        k := Div64_8(j64,1000000);
        j := j64;
        {$ENDIF}
        SetLength(Result,14);
        R := PW64(Result);
        goto digit_14;
      end;
      if j64<1000000000000000 then begin
        {$IFDEF CPU64BITS}
        k := j64 div 10000000;
        j := j64 - k*10000000;
        {$ELSE}
        k := Div64_8(j64,10000000);
        j := j64;
        {$ENDIF}
        SetLength(Result,15);
        R := PW64(Result);
        goto digit_15;
      end;
      if j64<10000000000000000 then begin
        {$IFDEF CPU64BITS}
        k := j64 div 100000000;
        j := j64 - k*100000000;
        {$ELSE}
        k := Div64_8(j64,100000000);
        j := j64;
        {$ENDIF}
        SetLength(Result,16);
        R := PW64(Result);
        goto digit_16;
      end;
      if j64<100000000000000000 then begin
        {$IFDEF CPU64BITS}
        k := j64 div 1000000000;
        j := j64 - k*1000000000;
        {$ELSE}
        k := Div64_8(j64,1000000000);
        j := j64;
        {$ENDIF}
        SetLength(Result,17);
        R := PW64(Result);
        goto digit_17;
      end;
      if j64<1000000000000000000 then begin
        {$IFDEF CPU64BITS}
        l := j64 div UInt64(100000000000000);
        j64 := j64-l*UInt64(100000000000000);
        k := j64 div 1000000;
        j := j64 - k*1000000;
        {$ELSE}
        l := Div64_4(j64,100000000000000);
        k := Div64_8(j64,1000000);
        j := j64;
        {$ENDIF}
        SetLength(Result,18);
        R := PW64(Result);
        goto digit_18;
      end;
      {$IFDEF CPU64BITS}
      l := j64 div UInt64(1000000000000000);
      j64 := j64-l*UInt64(1000000000000000);
      k := j64 div 10000000;
      j := j64 - k*10000000;
      {$ELSE}
      l := Div64_4(j64,1000000000000000);
      k := Div64_8(j64,10000000);
      j := j64;
      {$ENDIF}
      SetLength(Result,19);
      R := PW64(Result);
    end;
  end;
  R^ := UInt64(data2[l]);
  inc(R);
digit_15:
  a := k div 10000;
  k := k - a*10000;
  R^ := UInt64(data2[a]);
  inc(R);
digit_11:
  R^ := UInt64(data2[k]);
  inc(R);
digit_7:
  a := j div 1000;
  j := j-a*1000;
  R^ := UInt64(data2[a]);
  inc(R);
digit_3:
  P3WORD(R)^:=P3WORD(@data1[j])^;
  goto done;
digit_18:
  R^ := UInt64(data2[l]);
  inc(R);
digit_14:
  a := k div 10000;
  k := k-a*10000;
  R^ := UInt64(data2[a]);
  inc(R);
digit_10:
  R^ := UInt64(data2[k]);
  inc(R);
digit_6:
  a := j div 100;
  j := j-a*100;
  R^ := UInt64(data2[a]);
  inc(R);
digit_2:
  PDWORD(R)^:=PDWORD(@data1[j])^;
  goto done;
digit_17:
  a := k div 10000;
  k := k-a*10000;
  R^ := UInt64(data2[a]);
  inc(R);
digit_13:
  R^ := UInt64(data2[k]);
  inc(R);
digit_9:
  a := j div 100000;
  j := j-a*100000;
  R^ := UInt64(data2[a]);
  inc(R);
digit_5:
  a := j div 10;
  j := j-a*10;
  R^ := UInt64(data2[a]);
  inc(R);
digit_1:
  PWord(R)^ := PWord(@data1[j])^;
  goto done;
digit_16:
  a := k div 10000;
  k := k-a*10000;
  R^ := UInt64(data2[a]);
  inc(R);
digit_12:
  R^ := UInt64(data2[k]);
  inc(R);
digit_8:
  a := j div 10000;
  j := j-a*10000;
  R^ := UInt64(data2[a]);
  inc(R);
digit_4:
  R^ := UInt64(data2[j]);
done:
end;

procedure IntToStr2(var P : PWideChar; i : Integer); inline overload;
begin
  if i<0 then begin
    P^ := '-';
    inc(P);
    UIntToStr2(P,Cardinal(-i));
  end else UIntToStr2(P,Cardinal(i));
end;

procedure IntToStr2(var P : PWideChar; i64: Int64); inline; overload;
begin
  if i64<0 then begin
    P := '-';
    inc(P);
    UIntToStr2(P,UInt64(-i64));
  end else UIntToStr2(P,UInt64(i64));
end;

procedure UIntToStr2(var P : PWideChar; j: Cardinal); overload;
label done,digit_1,digit_2,digit_3,digit_4,digit_5,digit_6,digit_7,digit_8,digit_9;
var
  a : Cardinal;
begin
  if j<10 then goto digit_1;
  if j<100 then goto digit_2;
  if j<1000 then goto digit_3;
  if j<10000 then goto digit_4;
  if j<100000 then goto digit_5;
  if j<1000000 then goto digit_6;
  if j<10000000 then goto digit_7;
  if j<100000000 then goto digit_8;
  if j<1000000000 then goto digit_9;
  a := j div 1000000;
  j := j-a*1000000;
  PW64(P)^ := UInt64(Data2[a]);
  inc(P,4);
digit_6:
  a := j div 100;
  j := j - a * 100;
  PW64(P)^ := UInt64(Data2[a]);
  inc(P,4);
digit_2:
  PDWord(P)^ := PDWord(@Data1[j])^;
  inc(P,2);
  goto done;
digit_9:
  a := j div 100000;
  j := j - a * 100000;
  PW64(P)^ := UInt64(Data2[a]);
  inc(P,4);
digit_5:
  a := j div 10;
  j := j - a * 10;
  PW64(P)^ := UInt64(Data2[a]);
  inc(P,4);
digit_1:
  PWord(P)^ := PWord(@Data1[j])^;
  inc(P);
  goto done;
digit_8:
  a := j div 10000;
  j := j - a * 10000;
  PW64(P)^ := UInt64(Data2[a]);
  inc(P,4);
digit_4:
  PW64(P)^ := UInt64(Data2[j]);
  inc(P,4);
  goto done;
digit_7:
  a := j div 1000;
  j := j - a * 1000;
  PW64(P)^ := UInt64(Data2[a]);
  inc(P,4);
digit_3:
  P3Word(P)^ := P3Word(IntPtr(@Data2[j])+sizeof(Word))^;
  inc(P,3);
done:
end;

procedure UIntToStr2(var P : PWideChar; j64: UInt64); overload;
label done,digit_1,digit_2,digit_3,digit_4,digit_5,digit_6,digit_7,digit_8,digit_9,
  digit_10,digit_11,digit_12,digit_13,digit_14,digit_15,digit_16,digit_17,digit_18,
  digit_19;
var
  a,j,k,l : Cardinal;
begin
  if J64<=high(Cardinal) then begin
    j := J64;
    if j<10 then goto digit_1;
    if j<100 then goto digit_2;
    if j<1000 then goto digit_3;
    if j<10000 then goto digit_4;
    if j<100000 then goto digit_5;
    if j<1000000 then goto digit_6;
    if j<10000000 then goto digit_7;
    if j<100000000 then goto digit_8;
    if j<1000000000 then goto digit_9;
    k := j div 1000000;
    j := j - k*1000000;
    goto digit_10;
  end else begin
    if j64<10000000000 then begin
      {$IFDEF CPU64BITS}
      k := j64 div 1000000;
      j := j64 - k*1000000;
      {$ELSE}
      k := Div64_4(j64,1000000);
      j := j64;
      {$ENDIF}
      goto digit_10;
    end;
    if j64<100000000000 then begin
      {$IFDEF CPU64BITS}
      k := j64 div 10000000;
      j := j64 - k*10000000;
      {$ELSE}
      k := Div64_4(j64,10000000);
      j := j64;
      {$ENDIF}
      goto digit_11;
    end;
    if j64<1000000000000 then begin
      {$IFDEF CPU64BITS}
      k := j64 div 100000000;
      j := j64 - k*100000000;
      {$ELSE}
      k := Div64_4(j64,100000000);
      j := j64;
      {$ENDIF}
      goto digit_12;
    end;
    if j64<10000000000000 then begin
      {$IFDEF CPU64BITS}
      k := j64 div 1000000000;
      j := j64 - k*1000000000;
      {$ELSE}
      k := Div64_4(j64,1000000000);
      j := j64;
      {$ENDIF}
      goto digit_13;
    end;
    if j64<100000000000000 then begin
      {$IFDEF CPU64BITS}
      k := j64 div 1000000;
      j := j64 - k*1000000;
      {$ELSE}
      k := Div64_8(j64,1000000);
      j := j64;
      {$ENDIF}
      goto digit_14;
    end;
    if j64<1000000000000000 then begin
      {$IFDEF CPU64BITS}
      k := j64 div 10000000;
      j := j64 - k*10000000;
      {$ELSE}
      k := Div64_8(j64,10000000);
      j := j64;
      {$ENDIF}
      goto digit_15;
    end;
    if j64<10000000000000000 then begin
      {$IFDEF CPU64BITS}
      k := j64 div 100000000;
      j := j64 - k*100000000;
      {$ELSE}
      k := Div64_8(j64,100000000);
      j := j64;
      {$ENDIF}
      goto digit_16;
    end;
    if j64<100000000000000000 then begin
      {$IFDEF CPU64BITS}
      k := j64 div 1000000000;
      j := j64 - k*1000000000;
      {$ELSE}
      k := Div64_8(j64,1000000000);
      j := j64;
      {$ENDIF}
      goto digit_17;
    end;
    if j64<1000000000000000000 then begin
      {$IFDEF CPU64BITS}
      l := j64 div UInt64(100000000000000);
      j64 := j64-l*UInt64(100000000000000);
      k := j64 div 1000000;
      j := j64 - k*1000000;
      {$ELSE}
      l := Div64_4(j64,100000000000000);
      k := Div64_8(j64,1000000);
      j := j64;
      {$ENDIF}
      goto digit_18;
    end;
    if j64<10000000000000000000 then begin
      {$IFDEF CPU64BITS}
      l := j64 div UInt64(1000000000000000);
      j64 := j64-l*UInt64(1000000000000000);
      k := j64 div 10000000;
      j := j64 - k*10000000;
      {$ELSE}
      l := Div64_4(j64,1000000000000000);
      k := Div64_8(j64,10000000);
      j := j64;
      {$ENDIF}
      goto digit_19;
    end;
    {$IFDEF CPU64BITS}
    l := j64 div UInt64(10000000000000000);
    j64 := j64-l*UInt64(10000000000000000);
    k := j64 div 100000000;
    j := j64 - k*100000000;
    {$ELSE}
    l := Div64_4(j64,10000000000000000);
    k := Div64_8(j64,100000000);
    j := j64;
    {$ENDIF}
  end;
  PW64(P)^ := UInt64(data2[l]);
  inc(P,4);
digit_16:
  a := k div 10000;
  k := k-a*10000;
  PW64(P)^ := UInt64(data2[a]);
  inc(P,4);
digit_12:
  PW64(P)^ := UInt64(data2[k]);
  inc(P,4);
digit_8:
  a := j div 10000;
  j := j-a*10000;
  PW64(P)^ := UInt64(data2[a]);
  inc(P,4);
digit_4:
  PW64(P)^ := UInt64(data2[j]);
  inc(P,4);
  goto done;
digit_19:
  PW64(P)^ := UInt64(data2[l]);
  inc(P,4);
digit_15:
  a := k div 10000;
  k := k - a*10000;
  PW64(P)^ := UInt64(data2[a]);
  inc(P,4);
digit_11:
  PW64(P)^ := UInt64(data2[k]);
  inc(P,4);
digit_7:
  a := j div 1000;
  j := j-a*1000;
  PW64(P)^ := UInt64(data2[a]);
  inc(P,4);
digit_3:
  P3WORD(P)^:=P3WORD(@data1[j])^;
  inc(P,3);
  goto done;
digit_18:
  PW64(P)^ := UInt64(data2[l]);
  inc(P,4);
digit_14:
  a := k div 10000;
  k := k-a*10000;
  PW64(P)^ := UInt64(data2[a]);
  inc(P,4);
digit_10:
  PW64(P)^ := UInt64(data2[k]);
  inc(P,4);
digit_6:
  a := j div 100;
  j := j-a*100;
  PW64(P)^ := UInt64(data2[a]);
  inc(P,4);
digit_2:
  PDWORD(P)^:=PDWORD(@data1[j])^;
  inc(P,2);
  goto done;
digit_17:
  a := k div 10000;
  k := k-a*10000;
  PW64(P)^ := UInt64(data2[a]);
  inc(P,4);
digit_13:
  PW64(P)^ := UInt64(data2[k]);
  inc(P,4);
digit_9:
  a := j div 100000;
  j := j-a*100000;
  PW64(P)^ := UInt64(data2[a]);
  inc(P,4);
digit_5:
  a := j div 10;
  j := j-a*10;
  PW64(P)^ := UInt64(data2[a]);
  inc(P,4);
digit_1:
  PWord(P)^ := PWord(@data1[j])^;
  inc(P);
done:
end;

type
  Rec32 = packed record
    case integer of
    0 : (b0,b1,b2,b3 : Byte);
    1 : (w0,w1 : Word);
  end;
  Rec64 = packed record
    case integer of
    0 : (b0,b1,b2,b3,b4,b5,b6,b7 : Byte);
    1 : (w0,w1,w2,w3 : Word);
    2 : (c0,c1 : Cardinal);
  end;
  Arr32 = packed array[0..3] of byte;
  Arr64 = packed array[0..7] of byte;

procedure ByteToHex(const P : PWideChar; const b : Byte); inline;
begin
  PCardinal(P)^ := Cardinal(DATA3[b]);
end;

procedure WordToHex(const P : PWideChar; const Value : word); inline;
begin
{$IFDEF CPU64BITS}
  PW64(P)^:=Cardinal(DATA3[hi(Value)])+UInt64(Cardinal(DATA3[lo(Value)]))shl 32;
{$ELSE}
  ByteToHex(P,hi(Value));
  ByteToHex(P+2,lo(Value));
{$ENDIF}
end;

procedure CardinalToHex(const P : PWideChar; const Value : Cardinal); inline;
begin
  WordToHex(P,Rec32(Value).w1);
  WordToHex(P+4,Rec32(Value).w0);
end;

procedure UInt64ToHex(const P : PWideChar; const Value : UInt64); inline;
begin
  CardinalToHex(P,Rec64(Value).c1);
  CardinalToHex(P+8,Rec64(Value).c0);
end;


function IntToHex2(Value: Int8): string; overload;
begin
  SetLength(Result,2);
  ByteToHex(PWideChar(Result),Value);
end;

function IntToHex2(Value: UInt8): string; inline; overload;
begin Result := IntToHex2(Int8(Value)); end;

function IntToHex2(Value: Int16): string; overload;
begin
  SetLength(Result,4);
  WordToHex(PWideChar(Result),Value);
end;

function IntToHex2(Value: UInt16): string; overload;
begin Result := IntToHex2(Int16(Value)); end;

function IntToHex2(Value: Int32): string; overload;
begin
  SetLength(Result,8);
  CardinalToHex(PWideChar(Result),Value);
end;

function IntToHex2(Value: Cardinal): string; overload;
begin Result := IntToHex2(Int32(Value)); end;

function IntToHex2(Value: Int64): string; overload;
begin
  SetLength(Result,16);
  UInt64ToHex(PWideChar(Result),Value);
end;

function IntToHex2(Value: UInt64): string; inline; overload;
begin Result := IntToHex2(Int64(Value)); end;

const hexchar : packed array[0..$f] of char='0123456789ABCDEF';
function IntToHex2(Value: Integer; Digits: Integer): string; overload;
label char8,char4;
var R : PWideChar;
begin
  if Digits >= 8 then begin
    SetLength(Result,Digits);
    R := PWideChar(Result);
    while Digits>11 do begin
      PW64(R)^ := $0030003000300030;
      inc(R,4);
      dec(Digits,4);
    end;
    if Digits>9 then begin
      PCardinal(R)^ := $00300030;
      inc(R,2);
      dec(Digits,2);
    end;
    if Digits>8 then begin
      R^ := '0';
      inc(R);
    end;
    goto char8;
  end else begin
    if Cardinal(Value)>$fffffff then begin
      SetLength(Result,8);
      R := PWideChar(Result);
      goto char8;
    end else begin
      if (Digits=7)or(Cardinal(Value)>$ffffff) then begin
        SetLength(Result,7);
        PWideChar(Result)^ := hexchar[Rec32(Value).b3];
        R := PWideChar(Result)-1;
        ByteToHex(R+2,Rec32(Value).b2);
        goto char4;
      end;
      if (Digits=6)or(Cardinal(Value)>$fffff) then begin
        SetLength(Result,6);
        R := PWideChar(Result)-2;
        ByteToHex(R+2,Rec32(Value).b2);
        goto char4;
      end;
      if (Digits=5)or(Cardinal(Value)>$ffff) then begin
        SetLength(Result,5);
        PWideChar(Result)^ := hexchar[Rec32(Value).b2];
        R := PWideChar(Result)-3;
        goto char4;
      end;
      if (Digits=4)or(Cardinal(Value)>$fff) then begin
        SetLength(Result,4);
        R := PWideChar(Result)-4;
        goto char4;
      end;
      if (Digits=3)or(Cardinal(Value)>$ff) then begin
        SetLength(Result,3);
        PWideChar(Result)^ := hexchar[Rec32(Value).b1];
        ByteToHex(PWideChar(Result)+1,Byte(Value));
        exit;
      end;
      if (Digits=2)or(Cardinal(Value)>$f) then begin
        SetLength(Result,2);
        ByteToHex(PWideChar(Result),Byte(Value));
        exit;
      end;
      SetLength(Result,1);
      PWideChar(Result)^ := hexchar[Byte(Value)];
      exit;
    end;
  end;
  char8 : WordToHex(R,Rec32(Value).w1);
  char4 : WordToHex(R+4,Word(Value));
end;

function IntToHex2(Value: Cardinal; Digits: Integer): string; inline; overload;
begin Result := IntToHex2(Integer(Value),Digits); end;

function IntToHex2(Value: Int64; Digits: Integer): string; overload;
label char16,char12,char8,char4;
var R : PWideChar;
begin
  if Digits >= 16 then begin
    SetLength(Result,Digits);
    R := PWideChar(Result);
    while Digits>19 do begin
      PW64(R)^ := $0030003000300030;
      inc(R,4);
      dec(Digits,4);
    end;
    if Digits>17 then begin
      PDWord(R)^ := $00300030;
      inc(R,2);
      Dec(Digits,2);
    end;
    if Digits>16 then begin
      PWideChar(R)^ := '0';
      inc(R);
    end;
    goto char16;
  end else begin
    if UInt64(Value)>$fffffffffffffff then begin
      SetLength(Result,16);
      R := PWideChar(Result);
      goto char16;
    end else begin
      if (Digits=15)or(UInt64(Value)>$ffffffffffffff) then begin
        SetLength(Result,15);
        PWideChar(Result)^ := hexchar[Rec64(Value).b7];
        R := PWideChar(Result)-1;
        ByteToHex(R+2,Rec64(Value).b6);
        goto char12;
      end;
      if (Digits=14)or(UInt64(Value)>$fffffffffffff) then begin
        SetLength(Result,14);
        R := PWideChar(Result)-2;
        ByteToHex(R+2,Rec64(Value).b6);
        goto char12;
      end;
      if (Digits=13)or(UInt64(Value)>$ffffffffffff) then begin
        SetLength(Result,13);
        PWideChar(Result)^ := hexchar[Rec64(Value).b6];
        R := PWideChar(Result)-3;
        ByteToHex(R+4,Rec64(Value).b5);
        goto char12;
      end;
      if (Digits=12)or(UInt64(Value)>$fffffffffff) then begin
        SetLength(Result,12);
        R := PWideChar(Result)-4;
        goto char12;
      end;
      if (Digits=11)or(UInt64(Value)>$ffffffffff) then begin
        SetLength(Result,11);
        PWideChar(Result)^ := hexchar[Rec64(Value).b5];
        R := PWideChar(Result)-5;
        ByteToHex(R+6,Rec64(Value).b4);
        goto char8;
      end;
      if (Digits=10)or(UInt64(Value)>$fffffffff) then begin
        SetLength(Result,10);
        R := PWideChar(Result)-6;
        ByteToHex(R+6,Rec64(Value).b4);
        goto char8;
      end;
      if (Digits=9)or(UInt64(Value)>$ffffffff) then begin
        SetLength(Result,9);
        PWideChar(Result)^ := hexchar[Rec64(Value).b4];
        R := PWideChar(Result)-7;
        goto char8;
      end;
      if (Digits=8)or(Cardinal(Value)>$fffffff) then begin
        SetLength(Result,8);
        R := PWideChar(Result)-8;
        goto char8;
      end;
      if (Digits=7)or(Cardinal(Value)>$ffffff) then begin
        SetLength(Result,7);
        PWideChar(Result)^ := hexchar[Rec64(Value).b3];
        R := PWideChar(Result)-9;
        ByteToHex(R+10,Rec64(Value).b2);
        goto char4;
      end;
      if (Digits=6)or(Cardinal(Value)>$fffff) then begin
        SetLength(Result,6);
        R := PWideChar(Result)-10;
        ByteToHex(R+10,Rec64(Value).b2);
        goto char4;
      end;
      if (Digits=5)or(Cardinal(Value)>$ffff) then begin
        SetLength(Result,5);
        PWideChar(Result)^ := hexchar[Rec64(Value).b2];
        R := PWideChar(Result)-11;
        goto char4;
      end;
      if (Digits=4)or(Cardinal(Value)>$fff) then begin
        SetLength(Result,4);
        R := PWideChar(Result)-12;
        goto char4;
      end;
      if (Digits=3)or(Cardinal(Value)>$ff) then begin
        SetLength(Result,3);
        PWideChar(Result)^ := hexchar[Rec64(Value).b1];
        ByteToHex(PWideChar(Result)+1,Byte(Value));
        exit;
      end;
      if (Digits=2)or(Cardinal(Value)>$f) then begin
        SetLength(Result,2);
        ByteToHex(PWideChar(Result),Byte(Value));
        exit;
      end;
      SetLength(Result,1);
      PWideChar(Result)^ := hexchar[Byte(Value)];
      exit;
    end;
  end;
  char16 : WordToHex(R,Rec64(Value).w3);
  char12 : WordToHex(R+4,Rec64(Value).w2);
  char8 : WordToHex(R+8,Rec64(Value).w1);
  char4 : WordToHex(R+12,Word(Value));
end;

function IntToHex2(Value: UInt64; Digits: Integer): string; overload;
begin Result := IntToHex2(Int64(Value),Digits); end;

procedure IntToHex2(var P : PWideChar; Value : Int8); overload;
begin ByteToHex(P,Value); inc(P,2); end;

procedure IntToHex2(var P : PWideChar; Value: UInt8); inline; overload;
begin IntToHex2(P,Int8(Value)); end;

procedure IntToHex2(var P : PWideChar; Value: Int16); overload;
begin WordToHex(P,Value); inc(P,4); end;

procedure IntToHex2(var P : PWideChar; Value: UInt16); inline; overload;
begin IntToHex2(P,Int16(Value)); end;

procedure IntToHex2(var P : PWideChar; Value: Int32); overload;
begin CardinalToHex(P,Value); inc(P,8); end;

procedure IntToHex2(var P : PWideChar; Value: Cardinal); inline; overload;
begin IntToHex2(P,Int32(Value)); end;

procedure IntToHex2(var P : PWideChar; Value: Int64); overload;
begin UInt64ToHex(P,Value); inc(P,16); end;

procedure IntToHex2(var P : PWideChar; Value: UInt64); inline; overload;
begin IntToHex2(P,Int64(Value)); end;

procedure IntToHex2(var P : PWideChar; Value: Integer; Digits: Integer); overload;
label char8,char6,char4,char2;
begin
  if Digits >= 8 then begin
    while Digits>9 do begin
      PCardinal(P)^ := $300030;
      inc(P,2);
      dec(Digits,2);
    end;
    if Digits>8 then begin
      P^ := '0';
      inc(P);
    end;
    goto char8;
  end else begin
    if Cardinal(Value)>$fffffff then begin
      goto char8;
    end else begin
      if (Digits=7)or(Cardinal(Value)>$ffffff) then begin
        P^ := hexchar[Rec32(Value).b3];
        dec(P,1);
        goto char6;
      end;
      if (Digits=6)or(Cardinal(Value)>$fffff) then begin
        dec(P,2);
        goto char6;
      end;
      if (Digits=5)or(Cardinal(Value)>$ffff) then begin
        P^ := hexchar[Rec32(Value).b2];
        dec(P,3);
        goto char4;
      end;
      if (Digits=4)or(Cardinal(Value)>$fff) then begin
        dec(P,4);
        goto char4;
      end;
      if (Digits=3)or(Cardinal(Value)>$ff) then begin
        P^ := hexchar[Rec32(Value).b1];
        dec(P,5);
        goto char2;
      end;
      if (Digits=2)or(Cardinal(Value)>$f) then begin
        dec(P,6);
        goto char2;
      end;
      P^ := hexchar[Value];
      inc(P);
      exit;
    end;
  end;
  char8: ByteToHex(P,Rec32(Value).b3);
  char6: ByteToHex(P+2,Rec32(Value).b2);
  char4: ByteToHex(P+4,Rec32(Value).b1);
  char2: ByteToHex(P+6,Rec32(Value).b0);;
  inc(P,8);
end;

procedure IntToHex2(var P : PWideChar; Value: Cardinal; Digits: Integer); inline; overload;
begin IntToHex2(P,Int32(Value),Digits); end;

procedure IntToHex2(var P : PWideChar; Value: Int64; Digits: Integer); overload;
label char16,char14,char12,char10,char8,char6,char4,char2;
begin
  if Digits >= 16 then begin
    while Digits>17 do begin
      PCardinal(P)^ := $300030;
      inc(P,2);
      dec(Digits,2);
    end;
    if Digits>16 then begin
      P^ := '0';
      inc(P);
    end;
    goto char16;
  end else begin
    if UInt64(Value)>$fffffffffffffff then begin
      goto char16;
    end else begin
      if (Digits=15)or(UInt64(Value)>$ffffffffffffff) then begin
        P^ := hexchar[Rec64(Value).b7];
        dec(P,1);
        goto char14;
      end;
      if (Digits=14)or(UInt64(Value)>$fffffffffffff) then begin
        dec(P,2);
        goto char14;
      end;
      if (Digits=13)or(UInt64(Value)>$ffffffffffff) then begin
        P^ := hexchar[Rec64(Value).b6];
        dec(P,3);
        goto char12;
      end;
      if (Digits=12)or(UInt64(Value)>$fffffffffff) then begin
        dec(P,4);
        goto char12;
      end;
      if (Digits=11)or(UInt64(Value)>$ffffffffff) then begin
        P^ := hexchar[Rec64(Value).b5];
        dec(P,5);
        goto char10;
      end;
      if (Digits=10)or(UInt64(Value)>$fffffffff) then begin
        dec(P,6);
        goto char10;
      end;
      if (Digits=9)or(UInt64(Value)>$ffffffff) then begin
        P^ := hexchar[Rec64(Value).b4];
        dec(P,7);
        goto char8;
      end;
      if (Digits=8)or(Cardinal(Value)>$fffffff) then begin
        dec(P,8);
        goto char8;
      end;
      if (Digits=7)or(Cardinal(Value)>$ffffff) then begin
        P^ := hexchar[Rec64(Value).b3];
        dec(P,9);
        goto char6;
      end;
      if (Digits=6)or(Cardinal(Value)>$fffff) then begin
        dec(P,10);
        goto char6;
      end;
      if (Digits=5)or(Cardinal(Value)>$ffff) then begin
        P^ := hexchar[Rec64(Value).b2];
        dec(P,11);
        goto char4;
      end;
      if (Digits=4)or(Cardinal(Value)>$fff) then begin
        dec(P,12);
        goto char4;
      end;
      if (Digits=3)or(Cardinal(Value)>$ff) then begin
        P^ := hexchar[Rec64(Value).b1];
        dec(P,13);
        goto char2;
      end;
      if (Digits=2)or(Cardinal(Value)>$f) then begin
        dec(P,14);
        goto char2;
      end;
      P^ := hexchar[Value];
      inc(P);
      exit;
    end;
  end;
  char16: ByteToHex(P,Rec64(Value).b7);
  char14: ByteToHex(P+2,Rec64(Value).b6);
  char12: ByteToHex(P+4,Rec64(Value).b5);
  char10: ByteToHex(P+6,Rec64(Value).b4);
  char8: ByteToHex(P+8,Rec64(Value).b3);
  char6: ByteToHex(P+10,Rec64(Value).b2);
  char4: ByteToHex(P+12,Rec64(Value).b1);
  char2: ByteToHex(P+14,Rec64(Value).b0);
  inc(P,16);
end;

procedure IntToHex2(var P : PWideChar; Value: UInt64; Digits: Integer); inline; overload;
begin IntToHex2(P,Int64(Value),Digits); end;

procedure _BinToHex(var P : Pointer; Len : NativeInt; var S : PWideChar); inline;
begin
  while Len>1 do begin
  {$IFDEF CPU64BITS}
    PW64(S)^ := Cardinal(Data3[PByte(P)^])+UInt64(Cardinal(Data3[(PByte(P)+1)^])) shl 32;
  {$ELSE}
    PDWord(S)^ := Cardinal(Data3[PByte(P)^]);
    PDWord(S+2)^ := Cardinal(Data3[(PByte(P)+1)^]);
  {$ENDIF}
    dec(Len,2);
    inc(PByte(P),2);
    inc(S,4);
  end;
  if Len=1 then begin ByteToHex(S,PByte(P)^); inc(S,2); end;
end;

procedure BinToHex2(P : Pointer; Len : NativeInt; var S : PWideChar); overload;
begin _BinToHex(P,Len,S); end;

procedure BinToHex2(B : TBytes; var S : PWideChar; Len : NativeInt = 0); overload;
var l : NativeInt;
    P : Pointer;
begin
  l := Length(B);
  P := Pointer(B);
  if Len = 0 then len := l
  else if len<l then l := len;
  _BinToHex(P,l,S);
  while Len>l+1 do begin
    PUInt64(S)^ := $0030003000300030;
    Inc(S,4);
    inc(l,2);
  end;
  if Len>l then begin
    PCardinal(S)^ := $00300030;
    inc(S,2);
  end;
end;

function BinToHex2(P : Pointer; Len : NativeInt):String; overload;
var S : PWideChar;
begin
  SetLength(Result,Len*2);
  S := PWideChar(Result);
  _BinToHex(P,Len,S);
end;

function BinToHex2(B : TBytes; Len : NativeInt = 0):String; overload;
var S : PWideChar;
    l : NativeInt;
    P : Pointer;
begin
  l := Length(B);
  P := Pointer(B);
  if Len = 0 then len := l
  else if len<l then l := len;
  SetLength(Result,len*2);
  S := PWideChar(Result);
  _BinToHex(P,l,S);
  while Len>l+1 do begin
    PUInt64(S)^ := $0030003000300030;
    Inc(S,4);
    inc(l,2);
  end;
  if Len>l then PCardinal(S)^ := $00300030;
end;

function IntToHex2(Value : Pointer): string; inline; overload;
begin
{$IFDEF CPU64BITS}
  Result := IntToHex2(Int64(Value));
{$ELSE}
  Result := IntToHex2(Int32(Value));
{$ENDIF}
end;

procedure IntToHex2(var P : PWideChar; Value : Pointer); inline; overload;
begin
{$IFDEF CPU64BITS}
  IntToHex2(P,Int64(Value));
{$ELSE}
  IntToHex2(P,Int32(Value));
{$ENDIF}
end;

end.
